Android RecyclerView onClickListener
因此,经过5个月的网络开发,我需要回到android,但我注意到我的一些旧代码不再工作了。我有一个带有数据适配器的RecyclerView,但是项目的onClickListener没有响应任何东西。这就是我的代码的样子:Android RecyclerView onClickListener,android,android-recyclerview,onclicklistener,Android,Android Recyclerview,Onclicklistener,因此,经过5个月的网络开发,我需要回到android,但我注意到我的一些旧代码不再工作了。我有一个带有数据适配器的RecyclerView,但是项目的onClickListener没有响应任何东西。这就是我的代码的样子: public class ProjectAdapter extends RecyclerView.Adapter<ProjectAdapter.ViewHolder> { private List<Project> itemsData;
public class ProjectAdapter extends RecyclerView.Adapter<ProjectAdapter.ViewHolder> {
private List<Project> itemsData;
OnItemClickListener mItemClickListener;
public ProjectAdapter(List<Project> itemsData) {
this.itemsData = itemsData;
}
// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
// create a new views
View itemLayoutView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_layout, parent, false);
// create ViewHolder
ViewHolder vh = new ViewHolder(itemLayoutView);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
viewHolder.txtViewId.setText(String.valueOf(itemsData.get(position).getId()));
viewHolder.txtViewName.setText(itemsData.get(position).getName());
}
// inner class to hold a reference to each item of RecyclerView
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView txtViewName, txtViewId;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
txtViewName = (TextView) itemLayoutView.findViewById(R.id.item_name);
txtViewId = (TextView) itemLayoutView.findViewById(R.id.item_id);
}
@Override
public void onClick(View v) {
System.out.println("onClick");
TextView tv = (TextView) v.findViewById(R.id.item_name);
String id = tv.getText().toString();
mItemClickListener.onItemClick(v, getAdapterPosition(), id); //OnItemClickListener mItemClickListener;
}
}
public interface OnItemClickListener {
public void onItemClick(View view, int position, String id);
}
public void SetOnItemClickListener(final OnItemClickListener mItemClickListener) {
this.mItemClickListener = mItemClickListener;
}
// Return the size of your itemsData (invoked by the layout manager)
@Override
public int getItemCount() {
return itemsData.size();
}
}
显示列表时,单击不起作用,甚至控制台的日志也不起作用。
有人知道我做错了什么吗?我使用sdkv23作为编译SDK版本。我的最低SDK版本是v19。您没有将
ClickListener
设置为文本视图
或任何内容。在视图
中,单击onClick
应该调用什么?在找到如下视图后添加单击:
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
txtViewName = (TextView) itemLayoutView.findViewById(R.id.item_name);
txtViewId = (TextView) itemLayoutView.findViewById(R.id.item_id);
// here
itemLayoutView.setOnClickListener(this);
}
步骤1:更改构造函数
public ProjectAdapter(List<Project> itemsData,OnItemClickListener itemClickListener) {
this.itemsData = itemsData;
onItemClickListener = itemClickListener;
}
步骤3:从活动或片段将侦听器提供给适配器
MyAdapter myAdapter = new MyAdapter (list, this);
将项目单击侦听器设置为回收器视图行:
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
itemLayoutView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
TextView tv = (TextView) v.findViewById(R.id.item_name);
String id = tv.getText().toString();
mItemClickListener.onItemClick(getLayoutPosition(), v, id);
}
});
txtViewName = (TextView) itemLayoutView.findViewById(R.id.item_name);
txtViewId = (TextView) itemLayoutView.findViewById(R.id.item_id);
}
哦我的。。。。。。我怎么会错过这个。非常感谢你。我已经尝试将确切的代码添加到onCreateViewHolder中。我真愚蠢,没有将其添加到ViewHolder。需要等待1分钟才能接受^^^这可能有效,但不是正确的方法。跟着这个。看得更清楚些。而不是使ViewHolder实现View.OnClickListener。。。使用适配器中的allready。MitemClick侦听器。将其公开,以便您可以从活动初始化,然后从那里处理它(活动)。。。我认为这更像是ListView的itemOnclickListener…:)。
MyAdapter myAdapter = new MyAdapter (list, this);
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
itemLayoutView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
TextView tv = (TextView) v.findViewById(R.id.item_name);
String id = tv.getText().toString();
mItemClickListener.onItemClick(getLayoutPosition(), v, id);
}
});
txtViewName = (TextView) itemLayoutView.findViewById(R.id.item_name);
txtViewId = (TextView) itemLayoutView.findViewById(R.id.item_id);
}