一尘不染

Java如何在Fragment和适配器之间创建接口?

java

我有一个片段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
    }
}

按下按钮时,我需要通知片段。如何调用此接口?

请帮助。


阅读 499

收藏
2020-03-06

共1个答案

一尘不染

创建一个新的构造函数和一个实例变量:

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,您还必须将片段传递给适配器。例如

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

因为this它将引用您的Fragment,现在是AdapterInterface

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

2020-03-06