fragment和baseadapter之间的Android通信



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

在处理过程中,此片段将访问BaseAdapter,并且在此BaseAdapter中,我需要使用back 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");
                }
             }
       }
   }

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

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

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
    }
}

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

注: @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类中的适配器类

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;
}

最新更新