Ami*_*r_P 12 java android android-recyclerview
在我onBindViewHolder
的RecyclerView.Adapter<SearchAdapter.ViewHolder>
用户点击cardview
按钮时,我可以看到.但是当我滚动recyclerview时,其他一些项目按钮也显示为可见.为什么会这样?
这是我的代码:
@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);
}
}
});
...
}
Run Code Online (Sandbox Code Playgroud)
reV*_*rse 11
一旦开始向下滚动列表,您的视图就会被回收.这意味着onCreateViewHolder
重用以前膨胀的ViewHolder(创建的一些).
所以你要做的就是记住点击的位置(例如通过SparseBooleanArray)并检查onBindViewHolder
视图是否应该可见(之前点击过).
您可以SparseBooleanArray
在此StackOverflow帖子中找到该基本用法示例
"其他"可见项按钮是使用在回调中修改的相同视图的按钮.因为视图持有者(和视图)被回收:
它们应该只存储每次将视图符号绑定到某个位置时可以检索的信息.
应该刷新视图状态中可能更改的任何内容 onBindViewHolder()
在你的情况下,你应该在其他地方存储'被选中' 并重置可见性和最大线onBindViewHolder()
(不仅在回调中)
好主意是在Recycler视图中为一个项目创建一个包含所需数据的类对象,同时添加一个布尔值isItemWasClicked
并在内部onBindViewHolder()
检查此布尔值并使按钮可见或不可见.例如:
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;
});
}
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
976 次 |
最近记录: |