在onBindviewHolder组件上重复事件

时间:2016-03-17 07:04:25

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

很抱歉,我知道我重复了这个问题。当我更改cardview上的文字时,文字会重复到另一个文字。文字textview因位置不同而不同。当我点击某个组件{{1}时1}}重复另一个。请帮我解决问题..

onclicklistener

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

2 个答案:

答案 0 :(得分:1)

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

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());

                            });
                        }
                    });
                }
            }

答案 1 :(得分:1)

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

解决方法是在Datalist的类中创建一个对象,每当EditText按位置更改时保存该对象中的数据,并在每个OnBindViewHolder调用上按位置获取该数据并重新加载editText,否则保持为空。