kha*_*ntt 32 checkbox android listview
我对listview有一个问题,哪个列表项包含一个复选框.当我选中一个框并滚动列表时,复选框有时会自动调用oncheckedchange并且复选框的值会更改!
或者,当我的列表超过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" />
Run Code Online (Sandbox Code Playgroud)
这是适配器视图:
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;
}
Run Code Online (Sandbox Code Playgroud)
Fem*_*emi 74
该ListView
回收的视图类:你需要明确设置在该复选框是否被选中getView
类.所以添加支票就好
/**
* 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);
Run Code Online (Sandbox Code Playgroud)
在你打电话之前setOnCheckedChangeListener
.
小智 5
holder.cBox.setOnCheckedChangeListener(null);
holder.cBox.setChecked(list.get(position).isChecked());
holder.tvName.setText(item.getName());
holder.cBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if (isChecked)
{
list.get(position).setChecked(true);
}
else
{
list.get(position).setChecked(false);
}
}
});
Run Code Online (Sandbox Code Playgroud)
在列表中,该项目具有用于设置是否选中该项目的属性。您可以使用它来设置是否选中项目,然后首先设置
cBox.setOnCheckedChangeListener(null);
cBox.setChecked(list.get(position).isChecked());
Run Code Online (Sandbox Code Playgroud)
然后设置真实 new OnCheckedChangeListener()
我希望我的回答对您以及那些查看此页面或处理带有项目复选框的列表视图的人有用。
归档时间: |
|
查看次数: |
14500 次 |
最近记录: |