Items of RecyclerView are not showing correctly
在我的
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @Override public void onBindViewHolder(final ViewHolder viewHolder, final int position) { viewHolder.card.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (viewHolder.content_layout.getVisibility() == View.VISIBLE) { viewHolder.content_layout.setVisibility(View.GONE); viewHolder.address.setMaxLines(2); viewHolder.attribute.setMaxLines(2); } else { viewHolder.content_layout.setVisibility(View.VISIBLE); viewHolder.address.setMaxLines(8); viewHolder.attribute.setMaxLines(8); } } }); ... } |
一旦您开始向下滚动列表,您的视图就会被回收。这意味着以前膨胀的 ViewHolder(一些在
所以你需要做的是记住点击的位置(例如通过 SparseBooleanArray)并检查
您可以在 StackOverflow 帖子中找到
\\'其他\\'可见项目按钮是使用在回调中修改的相同视图的按钮。所以因为视图持有者(和视图)被回收了:
-
它们应该只存储每次viewholder绑定到一个位置时可以检索到的信息。
-
视图状态中可能发生的任何更改都应在
onBindViewHolder() 中刷新
在您的情况下,您应该将 \\'is selected\\' 存储在其他地方并重置
好主意是在回收站视图中创建一个包含一个项目所需的所有数据的类对象,还在那里添加一个布尔值
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public class OneItemOfList{ int priceToDisplay; String name; String date; boolean wasClicked; } public class YourAdapter extends RecyclerView.Adapter<OneItemOfList.ViewHolder> { ArrayList<OneItemOfList> items; ... @Override public void onBindViewHolder(ViewHolder viewHolder, final int position) { viewHolder.view.setText(items.get(position).name); if (items.get(position).wasClicked) viewHolder.button.setVisible(View.VISIBLE); else viewHolder.button.setVisible(View.GONE); viewHolder.view2.setOnClickListener(... OnClick(...){ items.get(position).wasClicked = !items.get(position).wasClicked; }); } ... } |
创建一个数组,例如布尔数组,并在每个位置单击时,在数组的相同位置设置为true。并在 onBindViewHolder 检查该 array[position] 是否为 true 设置该项目是否可见 if.