我有一个用RecyclerView
填充的列表,该列表由SQLite数据库提取。我使用onCheckedChanged
来处理数据。
如果我单击CheckBox
,则会调用方法setItem()
。
private void setItem(int position, boolean checked) {
// update entries in sqLiteDatabase at click position
// set the database-cursor to current entry
cursor.moveToPosition(position);
// convert boolean to integer, because SQLite does not support boolean values
int iSelected = checked ? 1 : 0;
// create SQL-query-string
String SQLQuery = "" +
"UPDATE country " +
"SET selected=" + iSelected +
" WHERE id='" + cursor.getString(cursor.getColumnIndex("id")) + "'";
// execute the query
sqLiteDatabase.execSQL(SQLQuery);
// create SQL-answer-string
String SQLAnswer = cursor.getString(cursor.getColumnIndex("name")) +
"; Id=" + cursor.getString(cursor.getColumnIndex("id")) +
"; Selected=" + cursor.getString(cursor.getColumnIndex("selected"));
Toast.makeText(context, SQLQuery + "\n\n" + SQLAnswer, Toast.LENGTH_LONG).show();
}
当我在CheckBox
上单击一次时,它显示:
SQLQuery =>“选择的更新国家/地区设置为1,其中id = 3”
SQLAnswer =>“捷克语; id = 3;已选择= 1”
当我单击两次时:
SQLQuery =>“选择的更新国家/地区设置为0,其中id = 3”
SQLAnswer =>“捷克语; id = 3;已选择= 1”
...这会改变。因此查询在0和1之间切换(取决于CheckBox
),但是答案永远不会变为0。
当我关闭应用程序并重新启动它时,数据库的输入操作很好,但是在运行时不会更新。
有人有想法吗(PHP从来没有这样的问题)?
答案 0 :(得分:1)
我找到了一种方法:
PHP
感谢您的评论和帮助。
我认为,“ cursor”是在MainAktivity中生成的,用于对适配器进行充气,因此,从游标中获取适配器中的一行时,将检索创建适配器时的状态,并且以后不能被适配器修改。 / p>
我什至无法用recyclerView或viewHolder理解这个奇怪的构造。它们仅通过滚动更改由onClickListener选中的复选框,并且程序员必须纠正此错误。他们真的很愚蠢。我认为,应该夸大列表,而os(android)必须在内部对其进行优化。