当前位置: 首页 > 知识库问答 >
问题:

如何在android中的listview滚动中保留复选框状态

贲言
2023-03-14

我有一个学生列表视图,每个行项目上都有一个开关和复选框以供学生出勤。我想保留滚动期间的开关框和复选框更改。我尝试了这种方法,但没有成功:

出勤率创建新.cs具有以下代码部分

 public override View GetView(int position, View convertView, ViewGroup parent)
    {
        View view = convertView;

        // re-use an existing view, if one is available
        // otherwise create a new one
        if (view == null)
        {
            view = activityContext.LayoutInflater.Inflate(Resource.Layout.AttendanceCreatenewRowlistLayout, parent, false);
            view.SetTag((Int32)position, view);
        }


        // initialize size for checkbox and switch box states
        checkBoxState = new bool[Count];
        switchBoxState = new bool[Count];

        item = this[position];


            view.FindViewById<TextView>(Resource.Id.student_name).Text = item.StudentName;
            view.FindViewById<TextView>(Resource.Id.date).Text = GetCustomDateTime(item.Date);
            checkBoxLeave = view.FindViewById<CheckBox>(Resource.Id.on_leave);
            switchPresentAbsent = view.FindViewById<Switch>(Resource.Id.present_absent_switch);

            checkBoxLeave.Tag = position;
            switchPresentAbsent.Tag = position;


            checkBoxLeave.SetOnCheckedChangeListener(null);
            switchPresentAbsent.SetOnCheckedChangeListener(null);

            switchBoxState[position] = item.Present;
            checkBoxState[position] = item.Leave;

            checkBoxLeave.Checked = checkBoxState[position];
            switchPresentAbsent.Checked = switchBoxState[position];

  checkBoxLeave.CheckedChange += delegate (object sender, CompoundButton.CheckedChangeEventArgs e)
        {
            CompoundButton buttonView = sender as CompoundButton;
            if (e.IsChecked)
            {

                int itemPosition = (int)buttonView.Tag;
                UpdateAdapterList(itemPosition, false, true);

            }
        };
            return view;
    }
private void UpdateAdapterList(int myPosition, bool leave, bool present)
    {

        NewAttendanceStudent newItem = this[myPosition];

        var attendanceTaken = new NewAttendanceStudent
        {
            StudentName = newItem.StudentName,
            SectionId = newItem.SectionId,
            ClassId = newItem.ClassId,
            RollNumber = newItem.RollNumber,
            Leave = leave,
            Present = present,
            Date = newItem.Date,
        };
        newAttendanceStudentList.Insert(myPosition,attendanceTaken);
    }

谢谢。

共有2个答案

戚阳文
2023-03-14

尝试一次,这可能会有所帮助,在我的情况下它有效:实现setOnClickListener()方法而不是setOnCheckedChangeListener()

喜欢:

checkBoxSelected.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    instrumentClickListener.onCheckBoxClick(instrumentDTO, checkBoxSelected.isChecked(), position);
                    Log.d(TAG, "checked item is check: " + checkBoxSelected.isChecked() + " \nitem: " + position);
                }
            });
孔君浩
2023-03-14

使用 setOnClick 查看器复选框,并更新全局数据中复选框的状态,这些复选框本来是为适配器类传递的,并在 setOnClickLenener 之后调用 notifyDataSetChanged(); 。使用复选框数据在 getView 中设置复选框的状态。

// initialized in the getView 

     if (globalData.get(position).getCheckbox().equalsIgnoreCase("1")) {
           holder.checkbox.setChecked(true);
     } else {
           holder.checkbox.setChecked(false);
     }

//checkbox clickelistener
 holder.checkbox.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                    final GlobalData clk_row = items.get(position);
                       if (Integer.parseInt(clk_row.getCheckbox()) == 0) {

                              globalData.get(position).setCheckbox("1");

                       } else {

                              globalData.get(position).setCheckbox("0");

                       }


                    notifyDataSetChanged();
                }

            });
 类似资料:
  • 我有一个简单的搜索列表视图与复选框,但它不能记住我的选择,当它得到过滤。 主要活动。xml 主要活动。JAVA 正如你在下面的图片中看到的,它不记得搜索后错误选择的“Petr”和“Ivan”。。。

  • 问题内容: 我有一个列表视图,大约有200个项目,我为复选框实现了一个自定义ArrayAdapter。我使用SparseBooleanArray来存储盒子的值。 所有这些工作正常,但我似乎无法以图形方式更新复选框的检查。如果用户单击,则选中该框。但是,如果我在代码中调用setChecked,则它对框本身没有影响(因此,即使其值为true,也不会对其进行打勾)。 我通过尝试将所有框都设置为true并

  • 我正在开发一个android烹饪应用程序(使用java),主页有一个回收器视图,其中填充了用户可以喜欢的食谱(类似于FaceBook帖子)。喜欢按钮是一个复选框,保存每个食谱的喜欢复选框状态的最佳方式是什么,所以当用户退出应用程序并再次登录时,他们不会多次喜欢同一个食谱。 在这种情况下,使用SharedReference是一个好主意吗? **im使用MySql作为数据库,不使用firebase。

  • 我已经设法让我的应用程序在复选框状态更改时更新数据库,但当我滚动应用程序时,复选框的状态会更改。 我的问题是:如何保存复选框的状态,以便在滚动视图时它们不会更改? 这是我的光标适配器。

  • 问题内容: 我有一个带有简单复选框的应用程序,当用户按下该复选框时,会在build.prop中添加一行,这是可行的,但是当我退出该应用程序时,该复选框已重置,有没有一种方法可以通过在其中添加示例代码来防止这种情况您的帖子,因为我仍然是Android应用程序的新手。 MainActivity.java activity_main.xml 问题答案: 使用getRuntime()。exec()在哪里得

  • 问题内容: 我的ListView自定义适配器(及其新实现的viewHolder)存在一些问题。我有一个ListView,每个项目都有一个复选框(这里没有新内容)。问题是,如果列表中有9个以上的项目,则当我选中第一个复选框时,将自动检查第10个复选框(第二个和第11个复选框相同),就像两个项目都有一个监听器一样(我相信情况确实如此)。 我在这里阅读了有关listView的位置问题,视图回收以及Vie