如何解决单击水平 RecyclerView 中的项目的问题?
How can I solve a problem with click on item in horizontal RecyclerView?
我有一个横向回收视图。有一些按钮。我将在下面提供我的代码。所以问题是当我点击一个按钮时,没有发生任何事情。它只是认为我没有点击它。我有另一个回收站视图,但垂直视图和代码非常相似,但第二个视图有效。我一直在努力寻找一个错误。我真的希望你能帮助我。谢谢。
我的主要是:
adapter1 = new RecyclerViewAdapterContinentsList(this, idList,continentList);
recyclerViewForContinents.setAdapter(adapter1);
adapter1.setClickListener(new RecyclerViewAdapterContinentsList.ItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(getApplicationContext(),"name",Toast.LENGTH_SHORT).show();
}
});
recyclerView class:
public class RecyclerViewAdapterContinentsList extends RecyclerView.Adapter<RecyclerViewAdapterContinentsList.ViewHolder>{
private List<String> mId;
private List<String> mName;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
Context context;
RecyclerViewAdapterContinentsList(Context context, List<String> id, List<String> name) {
this.mInflater = LayoutInflater.from(context);
this.mId = id;
this.mName = name;
this.context = context;
}
// inflates the row layout from xml when needed
@Override
public ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.activity_recycler_view_adapter_countinent_list, parent, false);
return new ViewHolder(view);
}
// binds the data to the TextView in each row
@Override
public void onBindViewHolder(ViewHolder holder,final int position) {
String id = mId.get(position);
String name = mName.get(position);
holder.continentBtn.setText(name);
}
// total number of rows
@Override
public int getItemCount() {
return mName.size();
}
// stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
Button continentBtn;
ViewHolder(View itemView) {
super(itemView);
continentBtn = itemView.findViewById(R.id.continentBtn);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) {
Toast.makeText(context,"name",Toast.LENGTH_SHORT).show();
mClickListener.onItemClick(view, getAdapterPosition());}
}
}
// convenience method for getting data at click position
String getItem(int id) {
return mId.get(id);
}
void setClickListener(RecyclerViewAdapterContinentsList.ItemClickListener itemClickListener) {
Toast.makeText(context,"name",Toast.LENGTH_SHORT).show();
this.mClickListener = itemClickListener;
}
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
更改您的 ViewHolder 代码以将 OnClickListener 附加到按钮而不是 itemView。
ViewHolder(View itemView)
{
super(itemView);
continentBtn = itemView.findViewById(R.id.continentBtn);
continentBtn.setOnClickListener(this); // <-- button not itemView
}
在您的 ViewHolder 中,itemView 是您布局的根视图组 R.layout.activity_recycler_view_adapter_countinent_list
,RecyclerView 可以使用 setOnItemClickListener
.
监听整行的点击事件
很简单,
首先你在你的按钮视图中给出 id 比在你的适配器中 onBindViewHolder
在视图中设置监听器并在监听器中执行任何事件。
@Override
public void onBindViewHolder(@NonNull final recycler_item_ads.ViewHolder holder, final int position) {
holder.installnow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//here print toast
}
}
});
holfer.install 现在是我在布局文件中的按钮
我有一个横向回收视图。有一些按钮。我将在下面提供我的代码。所以问题是当我点击一个按钮时,没有发生任何事情。它只是认为我没有点击它。我有另一个回收站视图,但垂直视图和代码非常相似,但第二个视图有效。我一直在努力寻找一个错误。我真的希望你能帮助我。谢谢。
我的主要是:
adapter1 = new RecyclerViewAdapterContinentsList(this, idList,continentList);
recyclerViewForContinents.setAdapter(adapter1);
adapter1.setClickListener(new RecyclerViewAdapterContinentsList.ItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Toast.makeText(getApplicationContext(),"name",Toast.LENGTH_SHORT).show();
}
});
recyclerView class:
public class RecyclerViewAdapterContinentsList extends RecyclerView.Adapter<RecyclerViewAdapterContinentsList.ViewHolder>{
private List<String> mId;
private List<String> mName;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
Context context;
RecyclerViewAdapterContinentsList(Context context, List<String> id, List<String> name) {
this.mInflater = LayoutInflater.from(context);
this.mId = id;
this.mName = name;
this.context = context;
}
// inflates the row layout from xml when needed
@Override
public ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.activity_recycler_view_adapter_countinent_list, parent, false);
return new ViewHolder(view);
}
// binds the data to the TextView in each row
@Override
public void onBindViewHolder(ViewHolder holder,final int position) {
String id = mId.get(position);
String name = mName.get(position);
holder.continentBtn.setText(name);
}
// total number of rows
@Override
public int getItemCount() {
return mName.size();
}
// stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
Button continentBtn;
ViewHolder(View itemView) {
super(itemView);
continentBtn = itemView.findViewById(R.id.continentBtn);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) {
Toast.makeText(context,"name",Toast.LENGTH_SHORT).show();
mClickListener.onItemClick(view, getAdapterPosition());}
}
}
// convenience method for getting data at click position
String getItem(int id) {
return mId.get(id);
}
void setClickListener(RecyclerViewAdapterContinentsList.ItemClickListener itemClickListener) {
Toast.makeText(context,"name",Toast.LENGTH_SHORT).show();
this.mClickListener = itemClickListener;
}
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
更改您的 ViewHolder 代码以将 OnClickListener 附加到按钮而不是 itemView。
ViewHolder(View itemView)
{
super(itemView);
continentBtn = itemView.findViewById(R.id.continentBtn);
continentBtn.setOnClickListener(this); // <-- button not itemView
}
在您的 ViewHolder 中,itemView 是您布局的根视图组 R.layout.activity_recycler_view_adapter_countinent_list
,RecyclerView 可以使用 setOnItemClickListener
.
很简单,
首先你在你的按钮视图中给出 id 比在你的适配器中 onBindViewHolder
在视图中设置监听器并在监听器中执行任何事件。
@Override
public void onBindViewHolder(@NonNull final recycler_item_ads.ViewHolder holder, final int position) {
holder.installnow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//here print toast
}
}
});
holfer.install 现在是我在布局文件中的按钮