带有切换按钮的 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

          }

       }
  });

希望对您有所帮助。