如何创buildFragment和适配器之间的接口?
我有片段与ListView ,说MyListFragment和自定义CursorAdapter 。 我在这个适配器中为列表行中的button设置onClickListener 。 
 public class MyListAdapter extends CursorAdapter { public interface AdapterInterface { public void buttonPressed(); } ... @Override public void bindView(final View view, final Context context, final Cursor cursor) { ViewHolder holder = (ViewHolder) view.getTag(); ... holder.button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // some action // need to notify MyListFragment } }); } } public MyListFragment extends Fragment implements AdapterInterface { @Override public void buttonPressed() { // some action } } 
当按下button时,我需要通知片段。 如何调用这个接口?
请帮助。
创build一个新的构造函数和一个实例variables:
 AdapterInterface buttonListener; public MyListAdapter (Context context, Cursor c, int flags, AdapterInterface buttonListener) { super(context,c,flags); this.buttonListener = buttonListener; } 
当适配器生成时,实例variables将被赋予适当的引用来保存。
从点击调用片段:
 public void onClick(View v) { buttonListener.buttonPressed(); } 
 制作Adapter ,您还必须将您的Fragment传递给适配器。 例如 
 MyListAdapter adapter = new MyListAdapter (getActivity(), myCursor, myFlags, this); 
 因为this将引用您的Fragment,它现在是AdapterInterface 。 
请记住,在片段变化的方向上,它很可能会被重新创build。 如果您的适配器没有重新创build,它可能会保留一个不存在的对象的引用,导致错误。
使用Eventbus:
例子:
要么
https://github.com/greenrobot/EventBus
使用接口:
 我明白目前的答案,但需要一个更清晰的例子。 这里是我用一个Adapter (RecyclerView.Adapter)和一个Fragment的例子。 
  创buildCallback接口: 
 public interface AdapterCallback { void onMethodCallback(); } 
  传递Callback / Fragment : 
 这将实现我们在Adapter中的Adapter 。 在这个例子中,当用户点击RecyclerView一个项目时,它会被调用。 
  在你的Fragment : 
 public class MyFragment extends Fragment implements AdapterCallback { private MyAdapter mMyAdapter; @Override public void onMethodCallback() { // do something } @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.mMyAdapter = new MyAdapter(this); // this class implements callback } } 
  在您的适配器中使用Callback : 
 在Fragment ,我们启动了Adapter并将其作为parameter passing给构造者。 这将启动我们的callback方法的interface 。 你可以看到我们使用我们的callback方法用户点击。 
 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private AdapterCallback mAdapterCallback; public MyAdapter(AdapterCallback callback) { this.mAdapterCallback = callback; } @Override public void onBindViewHolder(final MyAdapter.ViewHolder viewHolder, final int i) { // simple example, call interface here // not complete viewHolder.itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mAdapterCallback.onMethodCallback(); } }); } } 
  或者在适配器中使用Fragment : 
 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private AdapterCallback mAdapterCallback; public MyAdapter(Fragment fragment) { try { this.mAdapterCallback = ((AdapterCallback) fragment); } catch (ClassCastException e) { throw new ClassCastException("Fragment must implement AdapterCallback."); } } @Override public void onBindViewHolder(final MyAdapter.ViewHolder viewHolder, final int i) { // simple example, call interface here // not complete viewHolder.itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { mAdapterCallback.onMethodCallback(); } catch (ClassCastException exception) { // do something } } }); } } 
 按照以下两个步骤从Fragment (or Activity) Adapter接收callback 
  首先:在你的Adapter 
 public class ListAdapter extends RecyclerView.Adapter < RecyclerListAdapter.ItemViewHolder > { ... private ListAdapterListener mListener; public interface ListAdapterListener { // create an interface void onClickAtOKButton(int position); // create callback function } public RecyclerListAdapter(Context mContext, ArrayList < Items > listItems, ListAdapterListener mListener) { // add the interface to your adapter constructor ... this.mListener = mListener; // receive mListener from Fragment (or Activity) } ... public void onBindViewHolder(final ItemViewHolder holder, final int position) { holder.btnOK.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // use callback function in the place you want mListener.onClickAtOKButton(position); } }); ... } ... } 
  第二:在你的Fragment (or Activity) ,实现callback方法有两种方法 
方法1
  public MyListFragment extends Fragment { ... public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { ... ListAdapter adapter = new ListAdapter(getActivity(), listItems, new ListAdapter.ListAdapterListener() { @Override public void onClickAtOKButton(int position) { Toast.makeText(getActivity(), "click ok button at" + position, Toast.LENGTH_SHORT).show(); } }); ... } } 
方式2
 public MyListFragment extends Fragment implements ListAdapter.ListAdapterListener { ... public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { ListAdapter adapter = new ListAdapter (getActivity(), listItems, this); ... } @Override public void onClickAtOKButton(int position) { Toast.makeText(getActivity(), "click ok button at" + position, Toast.LENGTH_SHORT).show(); } } 
这与活动和片段应该交stream的方式非常相似。 在适配器的构造函数中,传递片段的引用,将其转换为接口,然后在onClick方法上调用yourReference.buttonPressed()。