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

Get card data and pass to intent when clicked

我正在使用 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 时,我想从按下的卡片中获取名称变量并将其传递到 onClick() 方法中的 intent 中。因此,如果我在 Card1 中按下 button,我会将值 "First Card" 传递给我的下一个 activity

提前致谢。

要从 Button Click 访问 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根据卡片点击取name值

为此使用附加功能:

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

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

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