SQLite似乎无法在Android RecyclerView中使用onCheckedChanged执行

时间:2019-01-01 00:32:27

标签: java android sqlite recycler-adapter oncheckedchanged

我有一个用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从来没有这样的问题)?

1 个答案:

答案 0 :(得分:1)

我找到了一种方法:

PHP

感谢您的评论和帮助。

我认为,“ cursor”是在MainAktivity中生成的,用于对适配器进行充气,因此,从游标中获取适配器中的一行时,将检索创建适配器时的状态,并且以后不能被适配器修改。 / p>

我什至无法用recyclerView或viewHolder理解这个奇怪的构造。它们仅通过滚动更改由onClickListener选中的复选框,并且程序员必须纠正此错误。他们真的很愚蠢。我认为,应该夸大列表,而os(android)必须在内部对其进行优化。