Fragment和BaseAdapter之间的Android通信

Posted

技术标签:

【中文标题】Fragment和BaseAdapter之间的Android通信【英文标题】:Android communication between fragment and baseadapter 【发布时间】:2015-12-29 01:47:53 【问题描述】:

需要专家意见我应该如何构建这个问题。我有一个自定义方法 process_filter 驻留在片段中,因为它需要访问此片段的私有 TextViewList

在处理过程中,这个片段将访问一个BaseAdapter,在这个BaseAdapter里面我需要使用返回process_filter方法

基本上这里是结构:

MyFragment.java

public class MyFragment extends Fragment 

   private List<String> filter_list;
   private TextView no_of_filter;

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 

   View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
   no_of_filter = (TextView) view.findViewById(R.id.no_of_filter_tv);
   .
   MyAdapter custom_adapter = new MyAdapter(context, "string 1", "string 2");
   .
   process_filter("string 1", "string 2");
   .
   

   public void process_filter(String in_preference, String current_value)
   
       no_of_filter.setText(in_preference);
   

MyAdapter.java

   class MyAdapter extends BaseAdapter 

       public View getView( final int position, View convertView, ViewGroup   parent)
       
             holder.checkBox.setOnClickListener( new View.OnClickListener() 
                public void onClick(View v) 
                    //Here I need to access back process_filter from fragment 
                    process_filter ("string 1, string 2");
                
             
       
   

【问题讨论】:

我的建议对你没有帮助吗?这是适配器和片段之间的通信方式。 @Marko 是的,我已经实现了它并且它的工作。我对 Java 面向对象编程不是很熟悉,但如果有更好的方法可以做到这一点,我会欢迎 *** 社区留下替代的附加答案。为了计算机科学的精神:) 据我所知,使用接口是正确的方法。另一种选择是在您的 Fragment 中创建一个静态方法,但这很糟糕,非常糟糕。 【参考方案1】:

创建从适配器到片段的接口。

在您的适配器中创建接口并将其传递给您的适配器的构造函数

class MyAdapter extends BaseAdapter 

    public interface IProcessFilter 
        void onProcessFilter(String string1, String string2)
    

    private IProcessFilter mCallback;

    public MyAdapter(Context context, String string1, String string2, IProcessFilter callback) 
        mCallback = callback;
    

    public View getView( final int position, View convertView, ViewGroup   parent)
    
        holder.checkBox.setOnClickListener( new View.OnClickListener() 
            public void onClick(View v) 
                mCallback.onProcessFilter("string1", "string2");
            
        
   

最后一件事,像这样在你的片段中实现它

public class MyFragment extends Fragment implements IProcessFilter 
    ...
    ...
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 

        View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
        no_of_filter = (TextView) view.findViewById(R.id.no_of_filter_tv);

        MyAdapter custom_adapter = new MyAdapter(context, "string 1", "string 2", this);  
    

    @Override
    public void onProcessFilter(String string1, String string2) 
        // Process the filter
    

【讨论】:

拯救了我的一天。谢谢!【参考方案2】:

抱歉回答晚了,可能对新手有用

注意: @Marko 的答案很完美,但在使用参数初始化适配器时需要做一些小改动。

第 1 步:创建监听器接口。

Public interface AdapterListener
Public void myListener();

第 2 步:在 Fragment 类中实现您的接口。

public class MyFragment extends Fragment implements AdapterListener

@Override
public void myListener()
//Do what you want
  

第 3 步:MyFragment 类中初始化 Adapter 类。

MyFragmentAdapter myfragmentAdapter=new MyFragmentAdapter(MyFragment.this);

第 4 步:在适配器类中初始化您的侦听器。

 public class MyFragmentAdapter extends Adapter<Your Code Related>
    private AdapterListener adapterListener;

    public MyFragmentAdapter(AdapterListener adapterListener)
    this.adapterListener=adapterListener;

【讨论】:

什么是Class 是类而不是类,接口不是接口。只是类型错误避免它。 什么是Interface

以上是关于Fragment和BaseAdapter之间的Android通信的主要内容,如果未能解决你的问题,请参考以下文章

如何在填充了 BaseAdapter 的 Fragment 中刷新 ListView?

Fragment之间的切换

使用 BaseAdapter 时片段 TabLayout 中的 NullPointerException

处理空列表 - 最好使用 ListFragment 或 Fragment+ListView?

fragment和activity之间进行数据交互

fragment和activity之间进行数据交互