有时在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方法中执行它,在适配器的情况下,这似乎并不存在。什么被认为是合适的地方?
答案 0 :(得分:1)
而是在Adapter
中定义它我会建议在Fragment
或Activity
中使用它。
为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;
}
}