0

SimpleCrusorAdaptorを使用して、リストビューにアイテムのリストを表示しています。リストビューのアイテムが選択されると、他のアクティビティが開始されます。このアクティビティは、リストビューに表示されるパズルのステータスを変更します。このアクティビティが終了し、リストビューを含むアクティビティが再びアクティブになると、リストビューに古いステータスが表示されます。

リストビューを含むアクティビティが再開した場合、カーソルアダプタが値を更新したことを確認するにはどうすればよいですか?cativityのonResume()で実行する必要があることはありますか?

private static String[] FROM = { PuzzleDatabase.KEY_PUZZLE_TITLE,
PuzzleDatabase.KEY_PUZZLE_STATUS };
private static int[] TO = { R.id.puzzle_title, R.id.puzzle_status };

 ListView  listView = (ListView) findViewById(R.id.puzzle_list);

 this.cursor = ps.puzzleDatabase.getPuzzleTitles();

 // Set up data binding
          SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                R.layout.puzzle_list_row, cursor, FROM, TO);

    // Assign adapter to ListView
    listView.setAdapter(adapter);
4

2 に答える 2

1

基になるデータセットが内容を変更するという理由だけで、カーソルはその内容を変更しません。カーソルには、クエリが実行された時点でのクエリの結果のデータが含まれています。

ローダーが必要です。ここでサンプルコードを見つけることができます:

https://github.com/marakana/yamba/blob/yambaII/Yamba/src/com/marakana/android/yamba/TimelineActivity.java

まず、loaderManagerを初期化する必要があります。次に、コールバックするときにローダーを渡します。最後に、ローダーの実行後にローダーがコールバックするときに、ローダーをアダプターにスワップする必要があります。

もちろん、カーソルも古くなっていることを通知する必要があります。そのためのサンプルコードがここにあります:

https://github.com/marakana/yamba/blob/yambaII/YambaService/src/com/marakana/android/yamba/svc/data/YambaProvider.java

たとえば、182行目を参照してください。

于 2013-02-09T16:39:15.447 に答える
1

値を更新するには、これを試してください

class YourClass extends Activity{
   //other members
   private Bundle savedInstanceState;   //add this to your code
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.savedInstanceState = savedInstanceState;    //add this to your code

    //your other code here 
   }
    @Override
protected void onResume() {                     //add this function to your code
    datasource.open();                      //change datasource to your own database class's object
    super.onResume();
    onCreate(savedInstanceState);        
}

}
于 2013-02-09T16:49:43.797 に答える