带有切换按钮的ListView无法顺利滚动

时间:2015-07-18 06:23:54

标签: android listview android-listview togglebutton

我有一个自定义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);
    }
}

2 个答案:

答案 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