我正在尝试为CardView中的不同卡片打开不同的Activity,但我只能为所有卡片打开相同的活动。 我在下面附上我的RVAdapter代码。请帮忙。
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder>{
List<person> persons;
public static class PersonViewHolder extends RecyclerView.ViewHolder{
CardView cv;
TextView tv1,tv2;
PersonViewHolder(View itemView){
super(itemView);
cv=(CardView)itemView.findViewById(R.id.cv);
tv1=(TextView)itemView.findViewById(R.id.tx1);
tv2=(TextView)itemView.findViewById(R.id.tx2);
cv.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v){
cv.getContext().startActivity(new Intent(cv.getContext(), second.class));
}
});
}
}
RVAdapter(List<person> persons){
this.persons=persons;
}
@Override
public int getItemCount()
{
return persons.size();
}
@Override
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup,int i){
View v= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_scroll_activity,viewGroup,false);
PersonViewHolder pvh=new PersonViewHolder(v);
return pvh;
}
@Override
public void onBindViewHolder(PersonViewHolder holder, int i) {
holder.tv1.setText(persons.get(i).name);
holder.tv2.setText(persons.get(i).branch);
}
@Override
public void onAttachedToRecyclerView(RecyclerView rcv)
{
super.onAttachedToRecyclerView(rcv);
}
}
答案 0 :(得分:2)
您实际上只设置了一个点击监听器。
您需要在列表中的每个元素上设置单击侦听器。
在onBindViewHolder
内写下这样的内容:
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v){
v.getContext().startActivity(new Intent(v.getContext(), second.class));
}
});
答案 1 :(得分:0)
如果我对您的问题的理解是正确的,如果有三种不同的卡片视图,则您有三种不同的活动,每种活动都针对每个卡片视图。要做到这一点,您必须使用位置识别卡片视图,然后在onBindViewHolder
Intent intent;
if(i == 0)
intent = new Intent(context, Class1.class);
else if(i == 1)
intent = new Intent(context, Class2.class);
else
intent = new Intent(context, Class3.class);
holder.itemView.setOnClickListener(new View.OnClickListener(){
@Override public void onClick(View v){
context.startActivity(intent);
}
}
答案 2 :(得分:0)
对 onBindViewHolder 使用 OnClick Listener 实施。
下面给出了一个简单的示例,其中Toast for 显示选择了哪个卡: (在onBindViewHolder中)
holder.cv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
Toast.makeText(v.getContext(), "Pos : " + position, Toast.LENGTH_SHORT).show();
}
});
只需修改onClick即可调用您的活动。