RecyclerView适配器自定义侦听器界面 [英] RecyclerView adapter custom listener interface
问题描述
我有一个带有自定义侦听器的RecyclerView,该侦听器要在我的主要活动中实现,以便在单击RecyclerView项时得到通知.
I have a RecyclerView with a custom listener that I want to implement in my main activity so that it gets notified when the RecyclerView item gets clicked.
但是,我不确定将setMyAdapterListener
放在适配器中的位置.我会放在哪里?
However, I'm not sure where to put setMyAdapterListener
in the adapter. Where would I put it?
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<Data> data;
private MyAdapterListener myAdapterListener;
public MyAdapter(Context context, List<Object> data) {
this.context = context;
this.data = data;
}
public interface MyAdapterListener {
void onContainerClick();
}
public void setMyAdapterListener(MyAdapterListener myAdapterListener) {
this.myAdapterListener = myAdapterListener;
}
public class ViewHolderItem extends RecyclerView.ViewHolder implements View.OnClickListener {
public LinearLayout container;
public ImageView poster;
public ViewHolderItem(View v) {
super(v);
container = (LinearLayout) v.findViewById(R.id.container);
poster = (ImageView) v.findViewById(R.id.poster);
}
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.container) {
if (myAdapterListener != null) {
myAdapterListener.onContainerClick();
}
}
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder = null;
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View v2 = inflater.inflate(R.layout.item_layout, parent, false);
viewHolder = new ViewHolderItem(v2);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Data item = (Data) data.get(position);
holder.poster.setImageDrawable(someDrawable);
}
@Override
public int getItemCount() {
return data.size();
}
}
推荐答案
删除setMyAdapter()只是将setMyAdapterListener中当前具有的参数作为recyclerview适配器构造函数的一部分传递,请参见以下内容:
Remove the setMyAdapter() just pass the arguments you currently have in your setMyAdapterListener as part of your recyclerview's adapter contructor, see below:
public MyAdapter(Context context, List<Object> data, MyAdapterListener myAdapterListener) {
this.context = context;
this.data = data;
this.myAdapterListener = myAdapterListener;
}
//在您的活动中,您必须实现界面的方法.
//On your activity you have to implement the methods of your interface.
这篇关于RecyclerView适配器自定义侦听器界面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!