任何人都可以帮帮我!无法正常编写意图,以便在我的回收站视图中启动新活动!有必要这样做的新方法吗?任何帮助都将非常感激!
这是我的View Holder Code;
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView title;
ImageView icon;
public MyViewHolder(View itemView, TextView textView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.listText);
icon = (ImageView) itemView.findViewById(R.id.listImage);
itemView.setOnClickListener(this);
title = textView;
}
@Override
public void onClick(View v) {
if (getPosition() == 0) {
Toast.makeText(v.getContext(), "Actvity 1", Toast.LENGTH_SHORT).show();
}
if (getPosition() == 1) {
Toast.makeText(v.getContext(), "Actvity 2", Toast.LENGTH_SHORT).show();
}
}
}
}
答案 0 :(得分:7)
在viewHolder中初始点击监听器。
/**
* see {@link <a href="https://youtu.be/imsr8NrIAMs?t=2163">Official Video</a>}
*/
public static class MyViewHolder extends RecyclerView.ViewHolder {
public MyViewHolder(View itemView) {
super(itemView);
//TODO: findViewById or ButterKnife
....
//set item view listener
itemView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View itemView) {
if (getAdapterPosition() != RecyclerView.NO_POSITION) {
Context c = itemView.getContext();
//TODO: startActivity
}
}
});
//TODO: set other child views' listener
....
}
}
答案 1 :(得分:1)
在自定义适配器中创建自己的构造函数。 例如:
private Context context;
public MyRecyclerViewAdapter(Context context,ArrayList<String> yourList){
this.context=context;
// further code
}
并且在调用适配器时只传递上下文的引用,现在您可以通过
调用intent context.startActivity()
&amp;所有其他方法。
答案 2 :(得分:0)
ViewHolder
只是项目特定布局中内部View
个对象的容器。它或您实施的RecyclerView.Adapter
都无法直接访问发送Context
所需的Intent
对象。不要在此设置OnClickListener
,而是将其放入适配器onBindViewHolder()
。如果您的适配器附加了自己的RecyclerView
,则会通知您,因此您可以在私有字段中保存对它的引用。从该视图中,您可以拨打getContext()
,然后您可以创建Intent
并通过常规方式发送。