在 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 否则保留它空。
抱歉,我知道我重复了这个 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 否则保留它空。