我有一个片段ListView,比如MyListFragment,和自定义CursorAdapter。我onClickListener在此适配器中为列表行中的按钮设置。
ListView
MyListFragment
CursorAdapter
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 } }
按下按钮时,我需要通知片段。如何调用此接口?
请帮助。
创建一个新的构造函数和一个实例变量:
AdapterInterface buttonListener; public MyListAdapter (Context context, Cursor c, int flags, AdapterInterface buttonListener) { super(context,c,flags); this.buttonListener = buttonListener; }
制作适配器时,将为实例变量提供适当的引用以进行保存。
要通过点击调用片段,请执行以下操作:
public void onClick(View v) { buttonListener.buttonPressed(); }
制作时Adapter,您还必须将片段传递给适配器。例如
Adapter
MyListAdapter adapter = new MyListAdapter (getActivity(), myCursor, myFlags, this);
因为this它将引用您的Fragment,现在是AdapterInterface。
AdapterInterface
请记住,在片段更改的方向上,很可能会重新创建它。如果未重新创建适配器,则它可能会保留对不存在对象的引用,从而导致错误。