Android 单击CardView加载片段
我在使用我的RecyclerView实现可点击卡片时遇到问题。我想得到卡被点击的位置,然后加载正确的片段 我确实看了一遍,花了将近30分钟试图理解代码并自己实现它,但当我意识到代码片段中有多少错误时,我放弃了 这是我的适配器类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
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);
额外的,额外的_