我有一个带有复选框的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
{
}
}
}
答案 0 :(得分:1)
是的,但问题是,按下“确定”后,我不知道这些值是多少,因为有些值没有绑定,因此返回null。
我认为你是对的,当这个项目在屏幕外时,ViewHolder
无法检索到CheckBox
,它会在通过{{1}滚动后立即更新}}
因此,作为一种解决方法,我认为您可以在从数据库中读取数据时复制数据,并将此副本用作onBindViewHolder
的数据资源,更改适配器中的副本数据当RecyclerView
的状态发生变化时。
最后当用户按下&#34; OK&#34;要保存更改,请将新数据副本保存到数据库,如果用户取消,请使用原始数据刷新CheckBox
。
或许您可以找到一些其他解决方法来解决您的问题。如有进一步的讨论,请发表评论。