2015-01-10 2 views
0

Я получил курсор из базы данных и установил адаптер в ListView. Затем я вставляю новую строку в базу данных, но мой ListView не обновлялся.Update ListView

Cursor c = getContentResolver().query(GEN_URI, null, null, null, null); 
 

 
String[] from = { DB.column_name }; 
 
int[] to = { R.id.textViewItem }; 
 

 
myAdapter = new SimpleCursorAdapter(this, R.layout.shop_list_item, c, from, to, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); 
 
\t 
 
ShopList.setAdapter(myAdapter); 
 

 
ContentValues newC = new ContentValues(); 
 
newC.put(DB.column_name, "Селёдочка"); 
 
Uri uri = getContentResolver().insert(SHOP_LIST_URI, newC); 
 
getContentResolver().query(GEN_URI, null, null, null, null); 
 
myAdapter.notifyDataSetChanged();

Если установить флаг SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER - ListView не обновляются. Если я установил флаг SimpleCursorAdapter.FLAG_AUTO_REQUERY- ListView update.

Что делать?

+0

Вы пробовали myAdapter.notifyDataSetChanged(); после обновления данных? –

+0

см. CursorAdapter # onContentChanged, этот метод вызывается при использовании флага FLAG_REGISTER_CONTENT_OBSERVER, вы можете переопределить этот метод в своем CursorAdapter и делать все, что хотите, базовая реализация здесь: http://androidxref.com/5.0.0_r2/xref/frameworks/ base/core/java/android/widget/CursorAdapter.java # 444 – pskink

ответ

0

Вы должны уведомить об этом адаптер, который изменил данные, и сообщить об обновлении.

adapter.notifyDataSetChanged(); 

При использовании autorequery флага, курсор автоматически requeris и, следовательно, ваш ListView становится обновляется, но, насколько я знаю, это FLAG_AUTO_REQUEY теперь осуждается.

UPDATE

Через некоторое Googling, я обнаружил, что notifyDataSetChanged не имеет ничего общего с SimpleCursorAdapters.

Таким обходным способом является запрос(). Но, как я сказал, он устарел, а новый метод - путем изменения Курсора.

adapter.changeCursor(cursor) and send it to your adapter. 

Настоящая официальная документация Google о requery().

+0

Я добавил myAdapter.notifyDataSetChanged(); Но ListView еще не обновлен –

+1

@ СтасПишевский notifyDataSetChanged не имеет никакого отношения к вашему делу – pskink

+0

Hirak Chhatbar, я сделал так: Cursor newC = getContentResolver(). Query (GEN_URI, null, null, null, null); myAdapter.changeCursor (newC); –

2

Вы можете попробовать myadapter.notifyDataSetChanged();