RecyclerView屏幕外复选框数据

时间:2017-01-18 11:17:58

标签: android xamarin android-recyclerview android-checkbox

我有一个带有复选框的RecyclerView。我希望当用户检查或取消选中它们时,包含匹配标题的数据库将更新布尔值,具体取决于是否选中了复选框。

但是,由于此列表中有很多复选框,因此其中一些是屏幕外的,因此始终没有绑定。
当用户单击“确定”保存更改时,我想查看复选框列表并检查哪些已选中。但是因为并非所有这些都被绑定,一些返回null并且我无法检查它们。

我该如何解决这个问题?

这是我的代码:

OKButton.Click += (s, e) =>
        {
            SQLiteDatabase db = SQLiteDatabase.OpenDatabase(dbPath, null, DatabaseOpenFlags.OpenReadwrite);
            for (int i = 0; i < mAdapter.ItemCount; i++)
            {
                try
                {
                    if ((mRecyclerView.FindViewHolderForAdapterPosition(i) as TimesSettingsAdapter.MyView).mTime.Checked)
                    {
                        string sql = "UPDATE Times SET Show = 'yes' WHERE Id = " + (i + 1).ToString();
                        db.ExecSQL(sql);

                    }
                    else
                    {
                        string sql = "UPDATE Times SET Show = 'no' WHERE Id = " + (i + 1).ToString();
                        db.ExecSQL(sql);

                    }
                }
                catch
                {

                }
            }
        }

1 个答案:

答案 0 :(得分:1)

  

是的,但问题是,按下“确定”后,我不知道这些值是多少,因为有些值没有绑定,因此返回null。

我认为你是对的,当这个项目在屏幕外时,ViewHolder无法检索到CheckBox,它会在通过{{1}滚动后立即更新}}

因此,作为一种解决方法,我认为您可以在从数据库中读取数据时复制数据,并将此副本用作onBindViewHolder的数据资源,更改适配器中的副本数据当RecyclerView的状态发生变化时。

最后当用户按下&#34; OK&#34;要保存更改,请将新数据副本保存到数据库,如果用户取消,请使用原始数据刷新CheckBox

或许您可以找到一些其他解决方法来解决您的问题。如有进一步的讨论,请发表评论。