获取卡片数据并在单击时传递给意图

时间:2015-12-14 04:41:38

标签: android android-recyclerview android-cardview android-viewholder

我正在与CardView合作并陷入一个小问题。我有RecyclerView我正在显示一些卡片。

问题是如何在点击时将卡变量传递给另一个activity

我有以下查看持有人:

public class DisciplinaViewHolder extends RecyclerView.ViewHolder {

protected TextView disciplinaNome;
protected TextView disciplinaCodigo;
protected TextView disciplinaCriador;
protected TextView disciplinaProfessor;
protected TextView disciplinaPeriodo;
protected CardView card;
protected ImageButton calendarButton;

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

    disciplinaNome = (TextView) itemView.findViewById(R.id.nome);
    disciplinaCodigo = (TextView) itemView.findViewById(R.id.codigo);
    disciplinaCriador = (TextView) itemView.findViewById(R.id.criadaPor);
    disciplinaProfessor = (TextView) itemView.findViewById(R.id.professor);
    disciplinaPeriodo = (TextView) itemView.findViewById(R.id.periodo);


    calendarButton = (ImageButton) itemView.findViewById(R.id.calendarBuutton);
    calendarButton.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(v.getContext(), CalendarActivity.class);
            v.getContext().startActivity(intent);
        }
    });

    card = (CardView) itemView;
  }
}

一个例子是:假设我有3张牌:

>Card1(name = "First Card"), 
>Card2(name = "Second Card"),
>Card3(name = "Third Card"). 

当我在其中一张卡片中按button时,我想从被按下的卡片中获取名称变量,并将其传递到intent方法的onClick()内。所以,如果我按下Card1中的button,我会传递值#34; First Card"到我的下一个activity

提前谢谢。

3 个答案:

答案 0 :(得分:1)

从按钮访问TextView单击使用v.getParent从布局访问View:

        ViewGroup parentView = (ViewGroup)v.getParent();
        TextView disciplinaNome =(TextView)parentView.findViewById(R.id.nome);
        Intent intent = new Intent(v.getContext(), CalendarActivity.class);
        intent.putExtra("name", disciplinaNome.getText().toString());
        v.getContext().startActivity(intent);

或者您也可以使用getTag/setTag根据卡片点击访问名称值。

答案 1 :(得分:1)

使用额外内容:

Intent intent = new Intent(v.getContext(), CalendarActivity.class);
intent.putExtra("extraName", extraValue);

请注意,您将遇到使用您的方法启动良好活动的问题。 由于RecyclerViews回收列表项,您需要在onBindViewHolder方法中而不是在ViewHolder构造函数中设置单击侦听器。

答案 2 :(得分:0)

尝试在onBindViewHolder中添加意图

  view.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
            Intent intent = new Intent(view.getContext(),                       
            MainActivity.class);
            intent.putExtra("onClick",viewHolder.getAdapterPosition);
            Log.i("CustomAdapter",viewHolder.getAdapterPosition()+"");
            view.getContext().startActivity(intent);
        }
    });