2011-06-26 13 views
1

このコードはうまくいきます - 私はSimpleCursorAdapterに一連の行をロードしています。いいねSimpleCursorAdapterはContentProviderの挿入時にデータとビューを再ロードしません

SimpleCursorAdapter adapter; 
Cursor cursor; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ListView lv = (ListView)findViewById(R.id.main_lv_projects); 
    lv.setOnItemClickListener(this); 
    String[] columns = new String[] { CompassDataProvider.ORG_NAME }; 
    int[] names = new int[] { R.id.organisation_row_name}; 

    cursor = this.managedQuery(CompassDataProvider.CONTENT_URI_ORGANISATIONS, null, null, null, null); 
    adapter = new SimpleCursorAdapter(this, R.layout.organisation_row, cursor, columns, names); 
    lv.setAdapter(adapter); 

    startManagingCursor(cursor); 
} 

が、私は新しい行を挿入してい

long rowID = db.getWritableDatabase().insert(CompassDBHelper.ORGS_TABLE_NAME, "", values); 
getContext().getContentResolver().notifyChange(CONTENT_URI_ORGANISATIONS, null); 
return Uri.withAppendedPath(CONTENT_URI_ORGANISATIONS, ""+rowID); 

を経由してリストビューには、自分自身をupdateingされていません - ない - 私はSimpleCursorAdapterは、そのビューをリロードすることができます通知され思いましたか?

新しい行が作成された - 私は、新しいデータが正しくロードされます...いただきました!ここにオブザーバー/リスナーパターン私のUIの脅威で

cursor.requery(); 
adapter.notifyDataSetChanged(); 

を使用しているとき、私はこの

で確認私はそれを得ていませんでしたか? :)

おかげで、

マーティン

答えて

0

カーソルが値によってSimpleCursorAdapterに渡され、参照していています。したがって、cursor.requeryの呼び出しは無効です。これを実現するには、実際にはlistAdapterを実装し、そこでカーソルを処理する必要があります。

+0

ListAdapterまたはCursorAdapter? [docs](http://developer.android.com/reference/android/content/ContentResolver.html#notifyChange)は「デフォルトでは、CursorAdapterオブジェクトはこの通知を受け取ります」と述べています。 – magegu

関連する問題