2016-02-22 3 views
0

Я пытаюсь открыть различную активность для разных карточек в CardView, но я могу открыть такую ​​же активность для всех карт. Я прилагаю код RVAdapter ниже. Пожалуйста помоги.Как открыть различные действия для каждого CardView в Android?

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

также В onBindViewHolder задайте прослушиватель кликов для CardView, а не конструктор ViewHolder. – Helix

ответ

2

Вы эффективно установить только один клик слушателя.

Вам нужно будет установить прослушиватель кликов для каждого элемента в вашем списке.

Внутри вашей onBindViewHolder написать что-то вроде этого:

holder.itemView.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View v){ 
     v.getContext().startActivity(new Intent(v.getContext(), second.class)); 
    } 

}); 
+0

Спасибо, он отлично работает. –

0

Если мое понимания вашего вопроса правильно, если есть три разные вид карты, у вас есть три различных видов деятельности, каждый для каждого просмотра карты. Чтобы сделать это, вы должны определить вид карты, используя положение и затем установите кнопку слушателя связанной активности для данного конкретного cardview в 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); 
    } 
} 
0

Использование OnClick Слушатель реализации для onBindViewHolder.

После дает простой пример с Toast для показывая, какие карты был выбран: (внутри onBindViewHolder)

holder.cv.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) 
    { 
       Toast.makeText(v.getContext(), "Pos : " + position, Toast.LENGTH_SHORT).show();    
    } 
}); 

Просто модифицирования OnClick назвать вашу деятельность.

Смежные вопросы