2011-08-03 12 views
0

SQLiteDatabase内のアイテムのブール値を設定するために使用するImageButtonがあります。SQLiteDatabaseの更新に対する応答

ImageButtonは、値が「1」の画像と値が「0」の画像を表示します。画像ボタンを押すと、データベースフィールドと画像が切り替わるはずです。

何らかの理由で、私がボタンを押すと、データベース上でupdateメソッドが呼び出されているにもかかわらず、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

が再クエリを()は推奨されません、ドキュメントは、それを作り直し、古いカーソルをクローズすると言います新しいものを使用してください。

カーソルは、作成時のスナップショットです。データベースが変更された場合は、再クエリーする必要があります。 @Pyrodanteが言っていたとおりrequery()はuの人はそれを解決する方法がわからない

を推奨されていませんので、

0

、それはいくつかの方法でカーソルrequery()に必要とされ、ここで私はこの問題を解決する方法です。

もっと良い方法があるかどうか教えてください。ありがとう!

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 
関連する問題