Отвечая на обновления в SQLiteDatabase - PullRequest
0 голосов
/ 04 августа 2011

У меня есть ImageButton, который я хочу использовать для установки логического значения для элемента в SQLiteDatabase.

ImageButton отобразит одно изображение со значением «1», а другое изображение со значением «0». Нажатие кнопки изображения должно переключать поле базы данных и, следовательно, его изображение.

По какой-то причине, когда я нажимаю кнопку, значение, возвращаемое currentCursor.getInt (), остается прежним, несмотря на то, что метод обновления вызывается для базы данных. Нужно ли обновлять / обновлять курсор?

В своей деятельности я имею:

private void updateFavouriteButton(){

  int favourite = currentCursor.getInt(currentCursor.getColumnIndex(Object.favourite));

        if (favourite == 1)
        {
            favouriteButton.setImageDrawable(getResources().getDrawable(R.drawable.favourite_selected));
            favouriteButton.setOnClickListener(new View.OnClickListener() {
                 public void onClick(View v) {

                     dbHelper.updateFavourite(selectedId, 0);

                     updateFavouriteButton();
                 }
             });
        }
        else
        {
            favouriteButton.setImageDrawable(getResources().getDrawable(R.drawable.favourite));
            favouriteButton.setOnClickListener(new View.OnClickListener() {
                 public void onClick(View v) {

                     dbHelper.updateFavourite(selectedId, 1);

                     updateFavouriteButton();
                 }
             });
        }
}     

В моей базе данных помощник:

public void updateFavourite(long rowId, int favourite) 
    {


        db.beginTransaction();

        try {
             ContentValues args = new ContentValues();
             args.put("ZFAVOURITE", favourite);

            int rowsAffected = db.update("ZOBJECT", args,"_id" + "=" + rowId, null);

            if (rowsAffected > 0)
                db.setTransactionSuccessful(); 

        } catch (Exception e) {

            Log.e("Error in transaction", e.toString());
        } finally {

            db.endTransaction();
        }


    }

Ответы [ 2 ]

2 голосов
/ 04 августа 2011

Requery () устарела, в документации сказано просто закрыть старый курсор, переделать его и использовать новый.

Курсор - это моментальный снимок на момент его создания.Если база данных изменилась, вы должны запросить.

0 голосов
/ 02 февраля 2013

Как сказал @Pyrodante, необходимо requery() курсор в некотором смысле, так как requery() устарел

Не уверен, как вы, ребята, решаете это, вот как я решаю эту проблему.1005 *

пожалуйста, дайте мне знать, если есть лучший способ.спасибо!

Cursor newCursor=CreateCursor(); //ChreateCursor() create a method which returns you a new cursor

mAdapter.changeCursor(newCursor); //Change to the new cursor so that the list will be updated
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...