【问题标题】:Get card data and pass to intent when clicked点击时获取卡片数据并传递给意图
【发布时间】:2016-03-19 12:17:22
【问题描述】:

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

提前谢谢你。

【问题讨论】:

  • 如何设置 RecyclerView 列表?
  • 抱歉,没有得到您的要求。您想知道我如何传递将显示在卡片上的信息吗?
  • 您可以通过点击卡片视图传递序列化对象,如“list.get(position)”

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


【解决方案1】:

为此使用附加功能:

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

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

【讨论】:

  • 非常感谢!您的代码和关于使用 onBindViewHolder 的提示都让我的应用程序运行得非常顺利。
【解决方案2】:

要从按钮单击访问 TextView,请使用 v.getParent 从布局中访问视图:

        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根据卡片点击获取名称值。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 1970-01-01
      • 2018-12-09
      • 2012-02-13
      相关资源
      最近更新 更多