Android 单击CardView加载片段

Android 单击CardView加载片段,android,android-fragments,android-recyclerview,android-cardview,Android,Android Fragments,Android Recyclerview,Android Cardview,我在使用我的RecyclerView实现可点击卡片时遇到问题。我想得到卡被点击的位置,然后加载正确的片段 我确实看了一遍,花了将近30分钟试图理解代码并自己实现它,但当我意识到代码片段中有多少错误时,我放弃了 这是我的适配器类 public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> { public static CardView cv; public static class

我在使用我的RecyclerView实现可点击卡片时遇到问题。我想得到卡被点击的位置,然后加载正确的片段

我确实看了一遍,花了将近30分钟试图理解代码并自己实现它,但当我意识到代码片段中有多少错误时,我放弃了

这是我的适配器类

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {

public static CardView cv;

public static class PersonViewHolder extends RecyclerView.ViewHolder {
    TextView chapterName;
    TextView chapterNumber;
    // ImageView chapterPhoto;

    public PersonViewHolder(View itemView) {
        super(itemView);

        cv = (CardView) itemView.findViewById(R.id.cv);
        chapterName = (TextView) itemView.findViewById(R.id.chapter_name);
        chapterNumber = (TextView) itemView.findViewById(R.id.chapter_number);
        // chapterPhoto = (ImageView) itemView.findViewById(R.id.person_photo);

    }
}

List<Chapter> chapters;

RVAdapter(List<Chapter> chapters) {
    this.chapters = chapters;
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
    PersonViewHolder pvh = new PersonViewHolder(v);
    return pvh;
}

@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
    personViewHolder.chapterName.setText(chapters.get(i).chapterName);
    personViewHolder.chapterNumber.setText(chapters.get(i).chapterNumber);
    // personViewHolder.chapterPhoto.setImageResource(persons.get(i).photoId);
}

@Override
public int getItemCount() {
    return chapters.size();
    }
}
公共类RVAdapter扩展了RecyclerView.Adapter{ 公共静态CardView cv; 公共静态类PersonViewHolder扩展了RecyclerView.ViewHolder{ 文本视图chapterName; 文本视图chapterNumber; //图像视图章节照片; public PersonViewHolder(查看项目视图){ 超级(项目视图); cv=(cardwiew)itemView.findviewbyd(R.id.cv); chapterName=(TextView)itemView.findViewById(R.id.chapter\u name); chapterNumber=(TextView)itemView.findViewById(R.id.chapter\U编号); //chapterPhoto=(ImageView)itemView.findViewById(R.id.person\u photo); } } 列出各章; RVAdapter(列出章节){ 本章=各章; } @凌驾 附加ToRecyclerView(RecyclerView RecyclerView)上的公共无效{ super.onAttachedToRecyclerView(recyclerView); } @凌驾 public PersonViewHolder onCreateViewHolder(视图组视图组,int i){ 视图v=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.item,viewGroup,false); PersonViewHolder pvh=新PersonViewHolder(v); 返回pvh; } @凌驾 BindViewHolder上的公共无效(PersonViewHolder PersonViewHolder,int i){ personViewHolder.chapterName.setText(chapters.get(i.chapterName)); personViewHolder.chapterNumber.setText(chapters.get(i).chapterNumber); //personViewHolder.chapterPhoto.setImageResource(persons.get(i.photoId)); } @凌驾 public int getItemCount(){ 返回chapters.size(); } } 我已经检查了StackOverflow上的每个实现,要么我有隧道愿景,要么它们都没有实际工作。我知道有很多贴子在旁边,但在问这个问题之前,我确实花了很多时间寻找答案,所以所有这些链接对我来说都是紫色的


非常感谢所有的帮助,我非常乐意发布任何其他可能有帮助的代码

为此,您需要使用自己的Clicklistener将OnClickListener添加到您的ViewHolder中,如下所示:

protected Context mContext;

RVAdapter(Context context, List<Chapter> chapters) {
    mContext = context;
    this.chapters = chapters;
}

public static class PersonViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView chapterName;
    TextView chapterNumber;
    // ImageView chapterPhoto;

    private long PERSONId;

    public PersonViewHolderClickListener clickListener;

    public PersonViewHolder(View itemView,PersonViewHolderClickListener clickListener) {
        super(itemView);

        cv = (CardView) itemView.findViewById(R.id.cv);
        chapterName = (TextView) itemView.findViewById(R.id.chapter_name);
        chapterNumber = (TextView) itemView.findViewById(R.id.chapter_number);
        // chapterPhoto = (ImageView) itemView.findViewById(R.id.person_photo);

        this.clickListener = clickListener;

        view.setOnClickListener(this);  
    }

    @Override
    public void onClick(View v) {
        clickListener.onItemClick(PERSONId);
    }
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
    PersonViewHolder pvh = new PersonViewHolder(v, new PersonViewHolderClickListener() {

        @Override
        public void onItemClick(long id) {
            Intent intent = new Intent(mContext, YOURActivity.class);
            intent.putExtra(EXTRA_PERSON_ID, id);
            mContext.startActivity(intent);
        }
    });
    return pvh;
}

@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
    personViewHolder.chapterName.setText(chapters.get(i).chapterName);
    personViewHolder.chapterNumber.setText(chapters.get(i).chapterNumber);
    // personViewHolder.chapterPhoto.setImageResource(persons.get(i).photoId);
    personViewHolder.PERSONId = i;
    }
新界面:

public interface PersonViewHolderClickListener {

    void onItemClick(long id);
}
并按如下方式更改您的RVAdapter类:

protected Context mContext;

RVAdapter(Context context, List<Chapter> chapters) {
    mContext = context;
    this.chapters = chapters;
}

public static class PersonViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView chapterName;
    TextView chapterNumber;
    // ImageView chapterPhoto;

    private long PERSONId;

    public PersonViewHolderClickListener clickListener;

    public PersonViewHolder(View itemView,PersonViewHolderClickListener clickListener) {
        super(itemView);

        cv = (CardView) itemView.findViewById(R.id.cv);
        chapterName = (TextView) itemView.findViewById(R.id.chapter_name);
        chapterNumber = (TextView) itemView.findViewById(R.id.chapter_number);
        // chapterPhoto = (ImageView) itemView.findViewById(R.id.person_photo);

        this.clickListener = clickListener;

        view.setOnClickListener(this);  
    }

    @Override
    public void onClick(View v) {
        clickListener.onItemClick(PERSONId);
    }
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
    PersonViewHolder pvh = new PersonViewHolder(v, new PersonViewHolderClickListener() {

        @Override
        public void onItemClick(long id) {
            Intent intent = new Intent(mContext, YOURActivity.class);
            intent.putExtra(EXTRA_PERSON_ID, id);
            mContext.startActivity(intent);
        }
    });
    return pvh;
}

@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
    personViewHolder.chapterName.setText(chapters.get(i).chapterName);
    personViewHolder.chapterNumber.setText(chapters.get(i).chapterNumber);
    // personViewHolder.chapterPhoto.setImageResource(persons.get(i).photoId);
    personViewHolder.PERSONId = i;
    }
受保护的上下文mContext;
RVAdapter(上下文,列出章节){
mContext=上下文;
本章=各章;
}
公共静态类PersonViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
文本视图chapterName;
文本视图chapterNumber;
//图像视图章节照片;
私人长人形;
PublicPersonViewHolderClickListener clickListener;
公共PersonViewHolder(查看项目视图、PersonViewHolder单击侦听器单击侦听器){
超级(项目视图);
cv=(cardwiew)itemView.findviewbyd(R.id.cv);
chapterName=(TextView)itemView.findViewById(R.id.chapter\u name);
chapterNumber=(TextView)itemView.findViewById(R.id.chapter\U编号);
//chapterPhoto=(ImageView)itemView.findViewById(R.id.person\u photo);
this.clickListener=clickListener;
view.setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
单击Listener.onItemClick(PERSONId);
}
}
@凌驾
public PersonViewHolder onCreateViewHolder(视图组视图组,int i){
视图v=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.item,viewGroup,false);
PersonViewHolder pvh=new PersonViewHolder(v,new PersonViewHolderClickListener()){
@凌驾
公共无效MClick(长id){
意图=新意图(mContext,YOURActivity.class);
意图.额外(额外人员ID,ID);
mContext.startActivity(意图);
}
});
返回pvh;
}
@凌驾
BindViewHolder上的公共无效(PersonViewHolder PersonViewHolder,int i){
personViewHolder.chapterName.setText(chapters.get(i.chapterName));
personViewHolder.chapterNumber.setText(chapters.get(i).chapterNumber);
//personViewHolder.chapterPhoto.setImageResource(persons.get(i.photoId));
personViewHolder.PERSONId=i;
}

为此,您需要使用自己的Clicklistener将OnClickListener添加到您的ViewHolder中,如下所示:

protected Context mContext;

RVAdapter(Context context, List<Chapter> chapters) {
    mContext = context;
    this.chapters = chapters;
}

public static class PersonViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView chapterName;
    TextView chapterNumber;
    // ImageView chapterPhoto;

    private long PERSONId;

    public PersonViewHolderClickListener clickListener;

    public PersonViewHolder(View itemView,PersonViewHolderClickListener clickListener) {
        super(itemView);

        cv = (CardView) itemView.findViewById(R.id.cv);
        chapterName = (TextView) itemView.findViewById(R.id.chapter_name);
        chapterNumber = (TextView) itemView.findViewById(R.id.chapter_number);
        // chapterPhoto = (ImageView) itemView.findViewById(R.id.person_photo);

        this.clickListener = clickListener;

        view.setOnClickListener(this);  
    }

    @Override
    public void onClick(View v) {
        clickListener.onItemClick(PERSONId);
    }
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
    PersonViewHolder pvh = new PersonViewHolder(v, new PersonViewHolderClickListener() {

        @Override
        public void onItemClick(long id) {
            Intent intent = new Intent(mContext, YOURActivity.class);
            intent.putExtra(EXTRA_PERSON_ID, id);
            mContext.startActivity(intent);
        }
    });
    return pvh;
}

@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
    personViewHolder.chapterName.setText(chapters.get(i).chapterName);
    personViewHolder.chapterNumber.setText(chapters.get(i).chapterNumber);
    // personViewHolder.chapterPhoto.setImageResource(persons.get(i).photoId);
    personViewHolder.PERSONId = i;
    }
新界面:

public interface PersonViewHolderClickListener {

    void onItemClick(long id);
}
并按如下方式更改您的RVAdapter类:

protected Context mContext;

RVAdapter(Context context, List<Chapter> chapters) {
    mContext = context;
    this.chapters = chapters;
}

public static class PersonViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView chapterName;
    TextView chapterNumber;
    // ImageView chapterPhoto;

    private long PERSONId;

    public PersonViewHolderClickListener clickListener;

    public PersonViewHolder(View itemView,PersonViewHolderClickListener clickListener) {
        super(itemView);

        cv = (CardView) itemView.findViewById(R.id.cv);
        chapterName = (TextView) itemView.findViewById(R.id.chapter_name);
        chapterNumber = (TextView) itemView.findViewById(R.id.chapter_number);
        // chapterPhoto = (ImageView) itemView.findViewById(R.id.person_photo);

        this.clickListener = clickListener;

        view.setOnClickListener(this);  
    }

    @Override
    public void onClick(View v) {
        clickListener.onItemClick(PERSONId);
    }
}

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
    PersonViewHolder pvh = new PersonViewHolder(v, new PersonViewHolderClickListener() {

        @Override
        public void onItemClick(long id) {
            Intent intent = new Intent(mContext, YOURActivity.class);
            intent.putExtra(EXTRA_PERSON_ID, id);
            mContext.startActivity(intent);
        }
    });
    return pvh;
}

@Override
public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
    personViewHolder.chapterName.setText(chapters.get(i).chapterName);
    personViewHolder.chapterNumber.setText(chapters.get(i).chapterNumber);
    // personViewHolder.chapterPhoto.setImageResource(persons.get(i).photoId);
    personViewHolder.PERSONId = i;
    }
受保护的上下文mContext;
RVAdapter(上下文,列出章节){
mContext=上下文;
本章=各章;
}
公共静态类PersonViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
文本视图chapterName;
文本视图chapterNumber;
//图像视图章节照片;
私人长人形;
PublicPersonViewHolderClickListener clickListener;
公共PersonViewHolder(查看项目视图、PersonViewHolder单击侦听器单击侦听器){
超级(项目视图);
cv=(cardwiew)itemView.findviewbyd(R.id.cv);
chapterName=(TextView)itemView.findViewById(R.id.chapter\u name);
chapterNumber=(TextView)itemView.findViewById(R.id.chapter\U编号);
//chapterPhoto=(ImageView)itemView.findViewById(R.id.person\u photo);
this.clickListener=clickListener;
view.setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
单击Listener.onItemClick(PERSONId);
}
}
@凌驾
public PersonViewHolder onCreateViewHolder(视图组视图组,int i){
视图v=LayoutInflater.from(viewGroup.getContext()).flate(R.layout.item,viewGroup,false);
PersonViewHolder pvh=new PersonViewHolder(v,new PersonViewHolderClickListener()){
@凌驾
公共无效MClick(长id){
意图=新意图(mContext,YOURActivity.class);
额外的,额外的_