我的RecyclerView存在一个小问题。我的适配器充满了一些TextView,ImageView和一些按钮。当其中一个按钮上有一个OnClick-Event时,它会修改一个TextView - 到目前为止一直很好但是当我滚动一些项目时,另一个RecyclerView项目也被修改并具有最初修改的值一。
我已经尝试将setOnClickListener移动到我的ViewHolder中,但结果是一样的。
可能你可以帮助我。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
// some vars .... and a constructor
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
// ...
viewHolder.myTextView.setText("clear");
viewHolder.myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolder.myTextView.setText("modified");
}
});
// ...
}
@Override
public int getItemCount() {
return mProducts.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView productMultibuy;
private Button productAddToShoppingList;
// ...
public ViewHolder(View itemView) {
super(itemView);
myTextView = (TextView) itemView.findViewById(R.id.my_textview);
myButton = (Button) itemView.findViewById(R.id.my_button);
// ...
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return false;
}
});
}
}
}
答案 0 :(得分:0)
从here阅读。
RecyclerView与ListView和GridView一样,尽可能重用视图。这意味着当您滚动时,从顶部掉落的视图将用于底部的视图等。这极大地提高了内存效率和滚动性能。这意味着如果您没有重置新项目的所有状态,您将看到上次使用此视图时遗留的状态。
始终重置所有状态
答案 1 :(得分:0)
谢谢,但我用setTag()和getTag()
解决了这个问题公共类MyAdapter扩展了RecyclerView.Adapter {
// some vars .... and a constructor
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(mContext).inflate(R.layout.recyclerview_item, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
// ...
}
@Override
public int getItemCount() {
return mProducts.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView productMultibuy;
private Button productAddToShoppingList;
// ...
public ViewHolder(View itemView) {
super(itemView);
myTextView = (TextView) itemView.findViewById(R.id.my_textview);
myTextView.setTag(this);
myButton = (Button) itemView.findViewById(R.id.my_button);
myButton.setTag(this);
// ...
myButton.getTag();
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myTextView.getTag();
myTextView.setText(String.valueOf(amount));
}
}
});
}
}
}