recyclerview 上的 onclicklistener 错误

error onclicklistener on recyclerview

我有一个 recyclerview,我想在点击它时接收位置和一个字符串并发送给其他 activity 和 运行 我不知道这段代码哪里有问题。

主要activity

@Override
public void onItemClick(int i) {
    datamodel clickedItem = postlist.get(i);

    Intent detailIntent = new Intent(MainActivity.this, Main2Activity.class);
    detailIntent.putExtra(EXTRA_URL, clickedItem.getmTitle());

    startActivity(detailIntent);
} 

适配器代码:

public class rrecyclerviewadapter extends RecyclerView.Adapter<rrecyclerviewadapter.myholder> {
private OnItemClickListener mListener;

private Context context;
private List<datamodel>mylist;

public interface OnItemClickListener {
    void onItemClick(int i);
}

public void setOnItemClickListener(OnItemClickListener listener) {
    this.mListener = listener;
}
public rrecyclerviewadapter(Context context, List<datamodel>mylist){
    this.context=context;
    this.mylist=mylist;

}

@NonNull
@Override
public myholder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

    View view= LayoutInflater.from(context).inflate(R.layout.each_item,viewGroup,false);

    return new myholder(view);

}

@Override
public void onBindViewHolder(@NonNull myholder myholder, int i) {

    datamodel datamodel=mylist.get(i);
    myholder.eachitemtxt.setText(datamodel.getmTitle());
    Picasso.with(context).load(datamodel.getMimageurl()).placeholder(R.drawable.pic3).error(R.drawable.pic4).into(myholder.eachitemimg);
}

@Override
public int getItemCount() {
    return mylist.size();
}


public class myholder extends RecyclerView.ViewHolder {
    private TextView eachitemtxt;
    private ImageView eachitemimg;


    public myholder(@NonNull final View itemView) {
        super(itemView);

        eachitemimg = (ImageView) itemView.findViewById(R.id.imageview_eachitem);
        eachitemtxt = (TextView)     itemView.findViewById(R.id.textview_eachitem);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context, "id:" + getAdapterPosition(), 
Toast.LENGTH_SHORT).show();
                int i=getAdapterPosition();
                if (i != RecyclerView.NO_POSITION) { 
                    mListener.onItemClick(i);
            }}
        });}}}

这里有完整的适配器代码

关于其他 activity 我明白了。

在测试 Toast 时在适配器中它完全可以工作,但在 mlistener 和 设置 id 它不起作用

我刚刚更换了适配器中的支架 class 试试下面的代码

 public class myholder extends RecyclerView.ViewHolder implements View.OnClickListener {

private TextView eachitemtxt;
private ImageView eachitemimg;

   public myholder(@NonNull final View itemView) {
    super(itemView);

    eachitemimg = (ImageView) itemView.findViewById(R.id.imageview_eachitem);
    eachitemtxt = (TextView)     itemView.findViewById(R.id.textview_eachitem);
    itemView.setOnClickListener(this);


    }


    @Override
    public void onClick(View v) {
        int p = getAdapterPosition();

        datamodel clickedItem = postlist.get(p);

        Intent detailIntent = new Intent(context, Main2Activity.class);
        detailIntent.putExtra(EXTRA_URL, clickedItem.getmTitle());

        context.startActivity(detailIntent);

    }


}

找到了。 只需添加

Adapter.setOnItemClickListener(Activitymain.this)

到您的主要活动