在适配器中分配接口侦听器的正确位置在哪里?

时间:2016-05-04 04:19:46

标签: java android interface android-recyclerview adapter

有时在RecyclerView适配器中,当您单击每行中的项目时调用函数会很有帮助,因此我定义了一个接口并为其分配了监听器:

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.RecyclerViewHolder> {
    private List<SomeObject> mSomeObjectList;
    private Context mContext;
    private RowClickListener mListener;

    public interface RowClickListener {
        void someFunction(SomeObject someObject);
    }

    public MyRecyclerViewAdapter(Context context, List<SomeObject> objects) {
        mContext = context;
        mSomeObjectList = objects;
        mListener = (RowClickListener) context;
    }
    //...

这是正确的方法吗?我注意到当人们在Fragment类中分配监听器时,他们通常在OnAttach方法中执行它,在适配器的情况下,这似乎并不存在。什么被认为是合适的地方?

2 个答案:

答案 0 :(得分:1)

而是在Adapter中定义它我会建议在FragmentActivity中使用它。

Interface定义单独的类,或在Fragment/Activity中定义。

public class SomeActivity extends Activity implements RowClickListener
{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        .
        .
        .
        MyRecyclerViewAdapter adapter = new MyRecyclerViewAdapter(context,list,this);
    }

    @Override
    public void someFunction(SomeObject someObject){

    }
}

public interface RowClickListener {
    void someFunction(SomeObject someObject);
}

并在您的适配器类

private RowClickListener mListener;

public MyRecyclerViewAdapter(Context context, List<SomeObject> objects, RowClickListener listener) {
    mContext = context;
    mSomeObjectList = objects;
    mListener = listener;
}

答案 1 :(得分:0)

是的,通过Adapter构造函数传递监听器很好。但是,在铸造之前检查类型。

public MyRecyclerViewAdapter(Context context, List<SomeObject> objects) 
{
        mContext = context;
        mSomeObjectList = objects;

        if(context instanceOf RowClickListener)
        {
            mListener = (RowClickListener) context;
        }
    }