SQLite, похоже, не выполняется в Android RecyclerView с onCheckedChanged - PullRequest
0 голосов
/ 01 января 2019

У меня есть список, накачанный 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 голосов
/ 01 января 2019

Я нашел способ:

Cursor c = sqLiteDatabase.rawQuery("SELECT * FROM country  WHERE id='" + cursor.getString(cursor.getColumnIndex("id")) + "'", null);

c.moveToFirst();

System.out.println(c.getString(c.getColumnIndex("selected")));

Спасибо за комментарии и помощь.

Я думаю, что «Main» был создан в MainAktivity для раздувания адаптера, так что выборкастрока в адаптере из курсора извлечет состояние, когда адаптер был создан и не может быть изменен адаптером позднее.

Я даже не могу понять эту странную конструкцию с recyclerView или viewHolder.Они изменяют флажки, которые устанавливаются onClickListener, только путем прокрутки, и программист должен исправить эти ошибки.С ними действительно глупо обращаться.На мой взгляд, список должен быть раздут, а ОС (андроид) должна его внутренне оптимизировать.

...