Java RecyclerView适配器自定义侦听器接口
我有一个带有自定义侦听器的RecyclerView,我想在我的主活动中实现它,以便在单击RecyclerView项时得到通知 但是,我不确定将Java RecyclerView适配器自定义侦听器接口,java,android,android-activity,android-recyclerview,Java,Android,Android Activity,Android Recyclerview,我有一个带有自定义侦听器的RecyclerView,我想在我的主活动中实现它,以便在单击RecyclerView项时得到通知 但是,我不确定将setMyAdapterListener放在适配器中的什么位置。我该把它放在哪里 public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private Context context; private List<Dat
setMyAdapterListener
放在适配器中的什么位置。我该把它放在哪里
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();
}
}
公共类MyAdapter扩展了RecyclerView.Adapter{
私人语境;
私人名单数据;
私人MyAdapterListener MyAdapterListener;
公共MyAdapter(上下文、列表数据){
this.context=上下文;
这个数据=数据;
}
公共接口MyAdapterListener{
void oncontainer单击();
}
public void setMyAdapterListener(MyAdapterListener MyAdapterListener){
this.myAdapterListener=myAdapterListener;
}
公共类ViewHolderItem扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
公共线路布局集装箱;
公众影像浏览海报;
公共ViewHolderItem(视图v){
超级(五);
容器=(线性布局)v.findViewById(R.id.container);
海报=(图像视图)v.findviewbyd(R.id.poster);
}
@凌驾
公共void onClick(视图v){
int id=v.getId();
if(id==R.id.container){
如果(myAdapterListener!=null){
myAdapterListener.onContainerClick();
}
}
}
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
RecyclerView.ViewHolder ViewHolder=null;
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
视图v2=充气机。充气(R.layout.item_布局,父项,false);
viewHolder=新的ViewHolderItem(v2);
返回视图持有者;
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
数据项=(数据)Data.get(位置);
支架。海报。可设置图像绘制(可绘制);
}
@凌驾
public int getItemCount(){
返回data.size();
}
}
删除setMyAdapter(),只需将setMyAdapterListener中当前包含的参数作为recyclerview的适配器构造函数的一部分进行传递,如下所示:
public MyAdapter(Context context, List<Object> data, MyAdapterListener myAdapterListener) {
this.context = context;
this.data = data;
this.myAdapterListener = myAdapterListener;
}
公共MyAdapter(上下文上下文、列表数据、MyAdapterListener MyAdapterListener){
this.context=上下文;
这个数据=数据;
this.myAdapterListener=myAdapterListener;
}
//在活动中,您必须实现接口的方法。正如@ScottS所说,您不需要setMyAdapter()方法,只需将onclick listener接口类作为参数传递给适配器构造函数,然后在活动类中实现接口方法。。代码如下所示 公共MyAdapter(上下文、列表数据){ this.context=上下文; 这个数据=数据; this.myAdapterListener=myAdapterListener; } 公共接口MyAdapterListener{ void onContainerClick();//请提供2个参数,以帮助您进行如下所示的操作 ///void oncontainer单击(视图,int位置); } } 公共类ViewHolderItem扩展了RecyclerView.ViewHolder实现了View.OnClickListener{ 公共线路布局集装箱; 公众影像浏览海报; 公共ViewHolderItem(视图v){ 超级(五); 容器=(线性布局)v.findViewById(R.id.container); 海报=(图像视图)v.findviewbyd(R.id.poster); container=setOnClickListener(this);///此行必须包括 } @凌驾 公共void onClick(视图v){ int id=v.getId(); if(id==R.id.container){ 如果(myAdapterListener!=null){ myAdapterListener.onContainerClick(); //onContainerClick(v,getAdapterPosition()); } } }
}您的问题解决了吗?