Android 在recyclerview中使用setVisibility()的正确方法是什么

Android 在recyclerview中使用setVisibility()的正确方法是什么,android,android-recyclerview,Android,Android Recyclerview,我有一个视图,可以点击按钮获取更多信息。信息最初是隐藏的,单击后显示。如果我单击了它,然后向下滚动,布局将被重用。现在,新视图显示隐藏的信息,而无需单击,因为它是重复使用的 如何避免或解决这个问题 编辑:一种方法是在onBindViewHolder中再次隐藏视图。但是想要一个更好的方法您遇到这个问题的原因是RecyclerView尝试循环视图,以防止在用户滚动时创建每个视图 所以您需要保存当前位置对象的状态,因为您不需要在这里推送适配器,我尝试在示例适配器中解释它 @Override publi

我有一个视图,可以点击按钮获取更多信息。信息最初是隐藏的,单击后显示。如果我单击了它,然后向下滚动,布局将被重用。现在,新视图显示隐藏的信息,而无需单击,因为它是重复使用的

如何避免或解决这个问题


编辑:一种方法是在onBindViewHolder中再次隐藏视图。但是想要一个更好的方法

您遇到这个问题的原因是RecyclerView尝试循环视图,以防止在用户滚动时创建每个视图

所以您需要保存当前位置对象的状态,因为您不需要在这里推送适配器,我尝试在示例适配器中解释它

@Override
public void onBindViewHolder(final ContactViewHolder contactViewHolder, final int position) {
    SampleObject eachObject = data.get(position);

    if(eachObject.getCurrentState() == SampleObject.CLICKED){
        // hide button
        // show additional information
    }
    else {
        // show button
        // hide additional information view
    }
在您的ContactViewHolder类中

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.show_data:
                SampleObject eachObject = data.get(position);
                eachObject.setCurrentState(SampleObject.CLICKED);
                break;

您必须跟踪单击的位置

  //global scope
int pos_clicked=-1;
class View_Holder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView txt;
    public View_Holder(View itemView) {
        super(itemView);
        txt = (TextView) itemView.findViewById(R.id.txt);
        txt.setOnclickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent intent;
        pos_clicked=getAdapterPosition();
          notifyDataSetChanged();
    }}
@Override
public void onBindViewHolder(View_Holder holder, int position) {
    if(pos_clicked==position){
        holder.txt.setVisibility(View.VISIBLE);
    }
    else{
        holder.txt.setVisibility(View.GONE);
    }}

提供适配器代码绑定数据时必须设置可见性。这就是bind方法的目的。您想要哪种更好的解决方案?而不是撤消视图上以前的所有操作。能告诉它重建吗?@suku我不知道你在干什么。撤消以前的所有操作是什么意思?毫无意义。你说的重建是什么意思?能告诉我们重建什么吗?如果您不明白,请发布适配器的代码,我可以为您修复…Recyclerview重用旧视图,因此我想知道是否可以强制Recyclerview重新格式化最初使用的错误单词。Anton澄清说,这将花费比在重用视图中撤消视图更改更多的时间。