带有切换按钮的 ListView 滚动不流畅
ListView with toggle button doesn't scroll smoothly
我有一个自定义的 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);
}
}
当您在列表视图项中显示复选框或切换按钮时,这是一个常见问题。一旦您选中了几个复选框,然后向下滚动列表视图,再次向上滚动后,所有内容都会混淆。
建议使用维护一个可以跟踪复选框状态的布尔数组。
检查这个已经回答 post - Custom listview with checkbox problem
你能试试下面的切换按钮 CheckChangeListener 代码吗?
原因:在BaseAdaptergetView()方法调用 在 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
}
}
});
希望对您有所帮助。
我有一个自定义的 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);
}
}
当您在列表视图项中显示复选框或切换按钮时,这是一个常见问题。一旦您选中了几个复选框,然后向下滚动列表视图,再次向上滚动后,所有内容都会混淆。 建议使用维护一个可以跟踪复选框状态的布尔数组。
检查这个已经回答 post - Custom listview with checkbox problem
你能试试下面的切换按钮 CheckChangeListener 代码吗?
原因:在BaseAdaptergetView()方法调用 在 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
}
}
});
希望对您有所帮助。