单击时获取卡片数据并传递给意图
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);
}
});
我正在使用 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);
}
});