gpt4 book ai didi

android - ListView 滚动时复选框自动调用onCheckedChange?

转载 作者:IT老高 更新时间:2023-10-28 21:45:50 28 4
gpt4 key购买 nike

我对包含复选框的 ListView 有疑问。当我选中一个框并滚动列表时,复选框有时会自动调用 oncheckedchange 并且复选框的值会更改!

或者,当我的 list 有超过 9 或 10 项时,当我在第 1 项检查时,第 8 或 9 项被选中???

谁能告诉我如何解决这个错误?

提前致谢!

list_item.xml

<ImageView
android:layout_alignParentLeft="true"
android:layout_width="36dip"
android:layout_height="36dip"
android:layout_centerVertical="true"
android:scaleType="fitCenter"
android:id="@+id/image_view"
android:src="@drawable/icon" />

<TextView android:layout_toRightOf="@id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dip"
android:id="@+id/text_view"
android:lines="1"
android:textSize="20sp"
android:textColor="@color/white" />

<TextView android:layout_toRightOf="@id/image_view"
android:layout_below="@id/text_view"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dip"
android:id="@+id/text_view2"
android:textSize="14sp"
android:lines="1"
android:textColor="@color/white" />

这是适配器 View :

    public View getView(int position, View convertView, ViewGroup parent) {
Log.e(TAG, "getView");
ViewHolder mViewHolder;
if (convertView == null) {
Log.e(TAG, "Inflater is inflating...");
convertView = mInflater.inflate(R.layout.custom_list_app, null);
mViewHolder = new ViewHolder();
mViewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox);
mViewHolder.remove = convertView.findViewById(R.id.music_info);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
Log.e(TAG, "Position: " + position + " CheckBox: " + mViewHolder.checkbox.isChecked());
}
mViewHolder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton cb, boolean flag) {
// TODO Auto-generated method stub
if (flag) {
Log.d(TAG, "Checkbox checked");
} else {
Log.d(TAG, "Checkbox un-checked");
}
}
});


return convertView;
}

最佳答案

ListView 回收 View 类:您需要明确设置是否在 getView 类中选中 CheckBox。所以添加一个像

这样的检查
/**
* Ensure no other setOnCheckedChangeListener is attached before you manually
* change its state.
*/
mViewHolder.checkbox.setOnCheckedChangeListener(null);
if(shouldBeChecked) mViewHolder.checkbox.setChecked(true);
else mViewHolder.checkbox.setChecked(false);

在调用 setOnCheckedChangeListener 之前。

关于android - ListView 滚动时复选框自动调用onCheckedChange?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6100518/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com