我已经实现了一个RecyclerView,它工作得很好。我有一个包含回收器视图数据的ArrayList。每一项的布局都很复杂。它包含两个frameLayout。framelayout1包含一个图像和一个文本,framelayout2包含一个图像和四个文本。当用户单击framelayout1时,我想打开Activity1,当用户单击framelayout2时,我想打开Activity2。我已经在回收器视图中搜索了onClick,我发现了非常有用的this。但是我如何才能获得arrayList的位置,以便在activity1或activity2中通过Intent传递它?
发布于 2016-02-21 22:01:59
尝试从视图管理器内部使用getAdapterPosition(),这样就可以获得用户单击时的适配器位置。
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Toast.makeText(context, String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
}
}有关getAdapterPosition()的更多信息,请访问以下link
发布于 2015-11-23 17:23:24
尝尝这个
public class ClosetListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
ClosetListAdapter (CallBack callback){
this.callback = callback
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder baseholder, int position) {
ViewHolder holder = (ViewHolder) baseholder;
holder.setPosition(position);
holder.name.setText(product.getName());
}
static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView name = null;
private OnProductClickListener onProductClickListener;
public ViewHolder(View itemView, OnProductClickListener onClickListener) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.item_name);
itemView.setOnClickListener(this)
}
public void setProdcut(Product product) {
this.product = product;
}
@Override
public void onClick(View v) {
if (callback!= null) {
callback.itemClicked(pos);
}
}
public void setPosition(int position){
this.pos = position;
}
}
interface CallBack {
void itemClicked(int position);
}
}发布于 2018-08-11 04:59:38
我也遇到过同样的问题。
我想找到RecyclerView()中被点击/选中的项的位置,并对该特定项执行一些特定的操作。
对于这类东西,getAdapterPosition()方法很有吸引力。经过一天的长时间研究和无数其他方法的尝试,我找到了这个方法。
int position = getAdapterPosition();
Toast.makeText(this, "Position is: "+position, Toast.LENGTH_SHORT).show();您不需要使用任何额外的方法。只需创建一个名为'position‘的全局变量,并在适配器的任何主要方法(类或类似方法)中使用getAdapterPosition()对其进行初始化。
以下是此link的简短文档。
在版本22.1.0中添加的
getAdapterPosition int getAdapterPosition ()返回由该ViewHolder表示的项的适配器位置。请注意,如果存在挂起的适配器更新但尚未发生新的布局传递,则此方法可能与getLayoutPosition()不同。在下一次布局遍历之前,RecyclerView不会处理任何适配器更新。这可能会在用户在屏幕上看到的内容和适配器内容之间产生暂时的不一致。这种不一致并不重要,因为它将小于16ms,但如果您希望使用ViewHolder位置来访问适配器,这可能是一个问题。有时,您可能需要获得准确的适配器位置,以执行一些响应用户事件的操作。在这种情况下,您应该使用此方法来计算ViewHolder的适配器位置。
很乐意为您效劳。请随时提出疑问。
https://stackoverflow.com/questions/33867145
复制相似问题