我有一个自定义ListView。它由游标适配器填充。它的每一行都包含一个ImageView,两个TextView和一个ToggleButton。这些都很好。当我将ToggleButtons组的状态更改为true时,那么当我快速滚动listView时,它不会顺利滚动,它会挂起一秒钟并滚动。当一组未经检查的按钮出现一组已检查按钮时,它会发生,反之亦然。滚动时为什么列表视图会挂起?
任何帮助将不胜感激。我的代码如下所示:
public void bindView(View view, Context context, final Cursor cursor) {
final ViewHolder viewHolder = new ViewHolder(view);
(...)
if (viewHolder.toggle_artist != null) {
viewHolder.toggle_artist.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int favourite = isChecked ? 1 : 0;
ContentValues value = new ContentValues();
String where = AmdmContract.ArtistEntry.TABLE_NAME + "." +
AmdmContract.ArtistEntry._ID + " = " + tableId;
value.put(AmdmContract.ArtistEntry.COLUMN_FAVORITE, favourite);
mContext.getContentResolver()
.update(AmdmContract.ArtistEntry.CONTENT_URI,
value, where, null);
}
});
int favFromDB = cursor.getInt(COL_FAVOURITE);
viewHolder.toggle_artist.setChecked(favFromDB == 1);
}
}
答案 0 :(得分:2)
您可以尝试使用以下Toggle Button CheckChangeListener代码。
原因 BaseAdapter getView()方法致电 每次滚动 ListView ,它将自动调用 onCheckChangeListener()。
请用以下代码替换您的代码:
tgl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ToggleButton selectedToggle = (ToggleButton) v;
if(selectedToggle.isChecked()){
// Code if toggle is checked
}else{
// Code if toggle is not checked
}
}
});
希望它会对你有所帮助。
答案 1 :(得分:0)
在listview项目中显示checkboxex或切换按钮时,这是一个常见问题。检查完几个复选框,然后向下滚动列表视图,再次向上滚动后,所有内容都会混淆。 建议使用维护一个可以跟踪复选框状态的布尔数组。
检查此已经回复的帖子 - Custom listview with checkbox problem