如何在android中为每个CardView打开不同的活动?

时间:2016-02-22 20:59:54

标签: android listview

我正在尝试为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);
}

}

3 个答案:

答案 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即可调用您的活动。