当用户单击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);
            }
        }
    });
    ...
}

最佳答案

一旦开始向下滚动列表, View 将被回收。这意味着先前已膨胀的ViewHolder(通过onCreateViewHolder创建的某些ViewHolder)已被重用。
因此,您要做的是记住被点击的位置(例如,通过SparseBooleanArray),并在onBindViewHolder中检查该 View 是否应该可见(先前被单击)。

您可以在this StackOverflow帖子中找到SparseBooleanArray的基本用法示例

关于java - RecyclerView的项目显示不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36824121/

10-11 22:26
查看更多