【问题标题】:RecyclerView data are multiple modified/displayedRecyclerView 数据被多次修改/显示
【发布时间】:2015-05-08 13:15:52
【问题描述】:

我的 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;
                }
            });

        }
     }
}

【问题讨论】:

    标签: android adapter onclicklistener android-recyclerview android-viewholder


    【解决方案1】:

    读自here

    RecyclerView 与 ListView 和 GridView 一样,尽可能重用视图。这意味着当你滚动时,从顶部掉下来的视图被用于底部的视图等。这大大提高了内存效率和滚动性能。这意味着如果您不重置新项目的所有状态,您将看到上次使用此视图时留下的状态。

    总是重置所有状态

    【讨论】:

      【解决方案2】:

      谢谢,但我用 setTag() 和 getTag() 解决了这个问题

      公共类 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));
                      }
                  }
              });
      
      
          }
       }
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-02
        • 1970-01-01
        • 2021-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-28
        相关资源
        最近更新 更多