RecyclerView 数据有多个modified/displayed
RecyclerView data are multiple modified/displayed
我的 RecyclerView 有一个小问题。我的适配器用一些 TextView、一个 ImageView 和一些按钮很好地填充了它。当其中一个按钮上有 OnClick-Event 时,它会修改 TextView - 到目前为止还不错,但是当我进一步滚动一些项目时,另一个 RecyclerView-item 也被修改并且具有最初修改的值。
我已经尝试将 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;
}
});
}
}
}
正在阅读 here。
RecyclerView 与ListView 和GridView 一样,尽可能重用视图。这意味着当您滚动时,从顶部掉落的视图将用于底部的视图等。这大大提高了内存效率和滚动性能。这意味着如果您不重置新项目的所有状态,您将看到上次使用此视图时留下的状态。
always reset all the of the state
谢谢,但我用 setTag() 和 getTag() 解决了问题
public class 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));
}
}
});
}
}
}
我的 RecyclerView 有一个小问题。我的适配器用一些 TextView、一个 ImageView 和一些按钮很好地填充了它。当其中一个按钮上有 OnClick-Event 时,它会修改 TextView - 到目前为止还不错,但是当我进一步滚动一些项目时,另一个 RecyclerView-item 也被修改并且具有最初修改的值。
我已经尝试将 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;
}
});
}
}
}
正在阅读 here。
RecyclerView 与ListView 和GridView 一样,尽可能重用视图。这意味着当您滚动时,从顶部掉落的视图将用于底部的视图等。这大大提高了内存效率和滚动性能。这意味着如果您不重置新项目的所有状态,您将看到上次使用此视图时留下的状态。
always reset all the of the state
谢谢,但我用 setTag() 和 getTag() 解决了问题
public class 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));
}
}
});
}
}
}