ListView не обновляется правильно CursorAdapter после swapCursor

У меня есть реализация CursorAdapter, которая невероятно проста. Я просто перепробовал newView и bindView (код ниже).

Что я делаю, так это добавить строку в свою таблицу, создать новый курсор, который запрашивает таблицу (с новой строкой), изменить курсор в адаптере и затем уведомить об изменении данных.

Что происходит, новая строка добавляется в ListView (как ожидается), но данные отражают первый элемент в списке. Интересная часть: когда я меняю ориентацию или просто перезаряжаю фрагмент (с помощью изменения вкладки), данные списка являются правильными.

Я создал грубую работу, и это просто изменить курсор и вызвать list.setAdapter еще раз. Это делает его обновление просто прекрасным.

Это приличный план, или есть способ исправить это без обхода?

КОД:

CursorAdapter:

@Override public View newView(Context context, Cursor cursor, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); return inflater.inflate(R.layout.list_item_encounters, parent, false); } @Override public void bindView(View view, Context context, Cursor cursor) { int rowID = cursor.getInt(GameTable.COLUMN_ID.getNum()); // set the list item info from the cursor // set the encounter title TextView t = (TextView)view.findViewById(R.id.encounter_creature_list_name); t.setText(String.format(t.getText().toString(), rowID + "")); // set the creature count int count = EncounterTable.getCreatureCount(GameSQLDataSource.getDatabase(), rowID); t = (TextView)view.findViewById(R.id.encounter_creature_list_hp); t.setText(String.format(t.getText().toString(), count +"")); } 

Я отлаживал метод getView, и данные, возвращаемые с моего Курсора, точны, и TextViews получают правильные данные, он просто отображает зеркало первого элемента.

Изменение курсора (не освежает должным образом):

 private void refreshList(){ Cursor c = GameTable.query(GameSQLDataSource.getDatabase()); EncounterAdapter adapter = (EncounterAdapter) mList.getAdapter(); adapter.changeCursor(c); adapter.notifyDataSetChanged(); } 

Изменение курсора (работа вокруг):

 private void refreshList(){ Cursor c = GameTable.query(GameSQLDataSource.getDatabase()); EncounterAdapter adapter = (EncounterAdapter) mList.getAdapter(); adapter.changeCursor(c); mList.setAdapter(adapter); }