在 onBindviewHolder 组件上重复事件

Repeating events on onBindviewHolder components

抱歉,我知道我重复了这个 question.When 我将 cardview 上的文字更改为 another.Text textview 不同 position.Also当我点击一个组件时 onclicklistener 重复一些 another.Please 帮助我解决问题..

 @Override
    public void onBindViewHolder(final DataObjectHolder holder, int position) {
        Context context=null;
        if(!(mDataset.get(position).getmText1().length()<=3&&mDataset.get(position).getmText1() == null && mDataset.get(position).getmText1().equals("#EE"))) {
            Log.e("Hello",mDataset.get(position).getmText1());
            holder.cardView.setCardBackgroundColor(Color.parseColor(mDataset.get(position).getmText1()));
            holder.cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    holder.set.setVisibility(View.VISIBLE);
                    holder.qua.setVisibility(View.VISIBLE);
                    holder.text.setVisibility(View.INVISIBLE);
                    holder.set.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            mDataset.get(position).setmText2(holder.qua.getText().toString());
                    if (!(mDataset.get(position).getmText2().length() == 0 && mDataset.get(position).getmText2().equals("0"))) {
                        holder.text.setVisibility(View.VISIBLE);
                        holder.set.setVisibility(View.INVISIBLE);
                        holder.qua.setVisibility(View.INVISIBLE);
                        holder.text.setText(mDataset.get(position).getmText2());
                    } else holder.text.setVisibility(View.INVISIBLE);
                        }
                    });
                }
            });
        }
    }

输入文字时的图片。 我滚动时的图片与我输入的文字相同!!

由于其回收机制,这是 RecyclerView 的正常行为。如果不满足条件,您应该重置视​​图的可见性。例如:

if(yourConditionIsTrue) {
   yourView.setVisibality(View.VISIBLE);
} else {
   yourView.setVisibality(View.GONE);
}

在您的情况下,将条件移出您的点击侦听器:

     @Override
            public void onBindViewHolder(final DataObjectHolder holder, int position) {
                Context context=null;

               holder.set.setVisibility(View.INVISIBLE);
               holder.qua.setVisibility(View.INVISIBLE);

                if (!(mDataset.get(position).getmText2()==null && mDataset.get(position).getmText2().equals("0"))) {
                                holder.text.setVisibility(View.VISIBLE);
holder.text.setText(mDataset.get(position).getmText2());
                            } else {
                                holder.text.setVisibility(View.INVISIBLE);
                            }

                if(!(mDataset.get(position).getmText1().length()<=3&&mDataset.get(position).getmText1() == null && mDataset.get(position).getmText1().equals("#EE"))) {
                    Log.e("Hello",mDataset.get(position).getmText1());
                    holder.cardView.setCardBackgroundColor(Color.parseColor(mDataset.get(position).getmText1()));
                    holder.cardView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            holder.set.setVisibility(View.VISIBLE);
                            holder.qua.setVisibility(View.VISIBLE);
                            holder.text.setVisibility(View.INVISIBLE);
                            holder.set.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                mDataset.get(position).setmText2(holder.qua.getText().toString());

                                holder.text.setVisibility(View.VISIBLE);
                                holder.set.setVisibility(View.INVISIBLE);
                                holder.qua.setVisibility(View.INVISIBLE);
                                holder.text.setText(mDataset.get(position).getmText2());

                            });
                        }
                    });
                }
            }

发生这种情况是因为 OnCreateViewHolder 不会在每次创建单元格时重复。 RecyclerView 仅在特定时间调用它,然后重复这些视图。

解决方案是在数据列表的 class 中创建一个对象,每当 EditText 按位置更改时将数据保存在该对象中,并且在每次 OnBindViewHolder 调用时按位置获取该数据并重新加载 editText 否则保留它空。