遇到过的ListView在滑动时数据错乱的几种情况:
- Listview滑动后,图片(/背景色)重复混乱(非异步加载时)
- Listview选取checkbox后,再滑动时,出现checkbox选取错位问题
- ListView异步加载图片时,图片显示重复错乱
CheckBox:
@Override
public View getView(final int position, View view, ViewGroup parent) {
final ViewHolder holder;
AttributeNames attributeNames = (AttributeNames) getItem(position);
if (view == null) {
view = LayoutInflater.from(mContext).inflate(R.layout.dialog_attribute_grid_select__item, null);
holder = new ViewHolder(view);
holder.dialogGridItemRadio.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
AttributeNames info = (AttributeNames) holder.dialogGridItemRadio.getTag();//通过getTag()方法取出对象
info.setSelected(compoundButton.isChecked());
if (compoundButton.isChecked()) {
holder.dialogGridItemShowOrHide.setVisibility(View.VISIBLE);
holder.dialogGridLinear.setBackgroundResource(R.drawable.dialog_grid_item_shape);
} else {
holder.dialogGridItemShowOrHide.setVisibility(View.GONE);
holder.dialogGridLinear.setBackground(null);
}
}
});
view.setTag(holder);
holder.dialogGridItemRadio.setTag(attributeNames);//if中需要setTag
} else {
holder = (ViewHolder) view.getTag();
holder.dialogGridItemRadio.setTag(attributeNames);//else中需要setTag
}
holder.dialogGridItemPopWindow.setImageResource(R.drawable.down);
holder.dialogGridItemName.setText(attributeNames.getAttributeName());
holder.dialogGridItemRadio.setChecked(attributeNames.isSelected());//获取点击
自定义CheckBox样式(点击出现扩散波纹):
1.
<CheckBox
android:id="@+id/dialog_grid_item_radio"
android:layout_width="30dp"
android:layout_height="25dp"
android:button="@drawable/checked_size"
/>
通过 android:button="@drawable/checked_size" 引用
文件 checked_size.xml 中
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="15dp"
android:height="15dp"
android:left="10dp"
android:right="10dp"
android:drawable="@drawable/radio_check"
/>
</layer-list>
文件 radio_check.xml 中
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/check_true" android:state_checked="false" />
<item android:drawable="@drawable/check_false" android:state_checked="true" />
</selector>
![自定义样式](https://i-blog.csdnimg.cn/blog_migrate/43fff11871cdc8c564af9d83dccb2711.png)
![自定义样式](https://i-blog.csdnimg.cn/blog_migrate/571d4fb0762a145a7704ba0af4fdd58a.png)