从 RecyclerView Adapter 开始新的 Intent
Start new Intent from RecyclerViewAdapter
我有 RecyclerViewAdapter :
public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.MyViewHolder> {
private List<Cards> items;
private int itemLayout;
Context context;
public RecycleViewAdapter(List<Cards> items, int itemLayout) {
this.items = items;
this.itemLayout= itemLayout;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).inflate(itemLayout,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Cards item=items.get(position);
holder.title.setText(item.getName());
String cardvalue = item.getCountry();
String cardCode = item.getCode();
String cardCountry = item.getCountry();
}
@Override
public int getItemCount() {
return items.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView title;
public MyViewHolder(View itemView) {
super(itemView);
title= (TextView) itemView.findViewById(R.id.listText);
title.setOnClickListener(this);
}
@Override
public void onClick(View v) {
}
}
}
我需要开始新的 Intent (OnCardsSelected.class),但我无法将此行添加到我的方法中 onClick
:
Intent intent = new Intent (this, OnCardSelected.class);
我不明白我做错了什么,我只需要启动 Intent 并为此意图添加一些信息,我阅读了一些手册但不理解他们的解释所以我希望你能帮助我。谢谢
可能尝试从 onClick
方法开始 Activity 然后使用 v.getContext()
而不是 this
( 引用 onClick 方法上下文) 作为 Intent 构造函数的第一个参数:
Intent intent = new Intent (v.getContext(), OnCardSelected.class);
public RecycleViewAdapter(Context context,List<Cards> items, int itemLayout) {
this.mContext = context;
this.items = items;
this.itemLayout= itemLayout;
}
...
Intent intent = new Intent(mContext, YOUR_ACTIVITY.class);
mContext.startActivity(intent)
在你的 onBindViewHolder 方法中添加这行代码
Intent intent = new Intent(v.getContext(), YourClassName.class);
v.getContext().startActivity(intent);
你可以开始了。
这是我在适配器的 BindViewHolder 中使用 OnClickListener 的示例
@Override
public void onBindViewHolder(@NonNull ItemHolder holder, int position) {
Item playerItem = (Item) itemList.get(position);
itemName = playerItem.getName();
itemPosition = holder.getAdapterPosition();
itemHolder = holder;
//Sets Text
holder.name.setText(itemName);
//holder.playerName.setTag(R.string.listSize, playerList.size());
holder.name.setTag(position);
//holder.image.setImageAlpha(playerItem.getImage());
holder.image.setImageResource(playerItem.getImage());
holder.image.setTag(position);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//goes to new activity passing the item name
Intent intent = new Intent(itemHolder.itemView.getContext(), MapActivity.class);
Bundle b = new Bundle();
//get text for current item
String textGet = itemName;
//put text into a bundle and add to intent
intent.putExtra("text", textGet);
//get position to carry integer
intent.putExtra("position", itemPosition);
intent.putExtras(b);
//begin activity
itemHolder.itemView.getContext().startActivity(intent);
}
});
}
您已经将上下文传递给适配器。因此,您可以在 onBindViewHolder() 内部创建意图。
Intent intent = new Intent(context,OnCardsSelected.class);
context.startActivity(intent);
Intent i = new Intent(holder.itemView.getContext(), NewOnCLickAccount.class);
holder.itemView.getContext().startActivity(i);
对我来说很好。
我有 RecyclerViewAdapter :
public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.MyViewHolder> {
private List<Cards> items;
private int itemLayout;
Context context;
public RecycleViewAdapter(List<Cards> items, int itemLayout) {
this.items = items;
this.itemLayout= itemLayout;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).inflate(itemLayout,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Cards item=items.get(position);
holder.title.setText(item.getName());
String cardvalue = item.getCountry();
String cardCode = item.getCode();
String cardCountry = item.getCountry();
}
@Override
public int getItemCount() {
return items.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView title;
public MyViewHolder(View itemView) {
super(itemView);
title= (TextView) itemView.findViewById(R.id.listText);
title.setOnClickListener(this);
}
@Override
public void onClick(View v) {
}
}
}
我需要开始新的 Intent (OnCardsSelected.class),但我无法将此行添加到我的方法中 onClick
:
Intent intent = new Intent (this, OnCardSelected.class);
我不明白我做错了什么,我只需要启动 Intent 并为此意图添加一些信息,我阅读了一些手册但不理解他们的解释所以我希望你能帮助我。谢谢
可能尝试从 onClick
方法开始 Activity 然后使用 v.getContext()
而不是 this
( 引用 onClick 方法上下文) 作为 Intent 构造函数的第一个参数:
Intent intent = new Intent (v.getContext(), OnCardSelected.class);
public RecycleViewAdapter(Context context,List<Cards> items, int itemLayout) {
this.mContext = context;
this.items = items;
this.itemLayout= itemLayout;
}
...
Intent intent = new Intent(mContext, YOUR_ACTIVITY.class);
mContext.startActivity(intent)
在你的 onBindViewHolder 方法中添加这行代码
Intent intent = new Intent(v.getContext(), YourClassName.class);
v.getContext().startActivity(intent);
你可以开始了。
这是我在适配器的 BindViewHolder 中使用 OnClickListener 的示例
@Override
public void onBindViewHolder(@NonNull ItemHolder holder, int position) {
Item playerItem = (Item) itemList.get(position);
itemName = playerItem.getName();
itemPosition = holder.getAdapterPosition();
itemHolder = holder;
//Sets Text
holder.name.setText(itemName);
//holder.playerName.setTag(R.string.listSize, playerList.size());
holder.name.setTag(position);
//holder.image.setImageAlpha(playerItem.getImage());
holder.image.setImageResource(playerItem.getImage());
holder.image.setTag(position);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//goes to new activity passing the item name
Intent intent = new Intent(itemHolder.itemView.getContext(), MapActivity.class);
Bundle b = new Bundle();
//get text for current item
String textGet = itemName;
//put text into a bundle and add to intent
intent.putExtra("text", textGet);
//get position to carry integer
intent.putExtra("position", itemPosition);
intent.putExtras(b);
//begin activity
itemHolder.itemView.getContext().startActivity(intent);
}
});
}
您已经将上下文传递给适配器。因此,您可以在 onBindViewHolder() 内部创建意图。
Intent intent = new Intent(context,OnCardsSelected.class);
context.startActivity(intent);
Intent i = new Intent(holder.itemView.getContext(), NewOnCLickAccount.class);
holder.itemView.getContext().startActivity(i);
对我来说很好。