java – 如何在Fragment和adapter之间创建接口?

我有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();
}

制作适配器时,您还必须将片段传递给适配器.例如

MyListAdapter adapter = new MyListAdapter (getActivity(), myCursor, myFlags, this);

因为这将引用你的Fragment,它现在是一个AdapterInterface.

请记住,在片段方向更改时,很可能会重新创建.如果未重新创建适配器,则可能会保留对不存在的对象的引用,从而导致错误.

转载注明原文:java – 如何在Fragment和adapter之间创建接口? - 代码日志