SimpleCursorAdapter не перезагружает данные и представление о вставке в ContentProvider - PullRequest
1 голос
/ 26 июня 2011

этот код работает нормально - я загружаю кучу строк в SimpleCursorAdapter, и ListView отображает их. отлично.

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);

представление списка не обновляется само по себе - я думал, что SimpleCursorAdapter уведомлен и может перезагрузить его представление - не так ли?

создана новая строка - я проверил на этом

когда я использую

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

в моей угрозе пользовательского интерфейса новые данные загружаются правильно ... что за образец наблюдателя / слушателя здесь я не получил? :)

спасибо, Martin

1 Ответ

0 голосов
/ 26 июня 2011

Курсор передается в SimpleCursorAdapter по значению, а не по ссылке. Итак, вызов cursor.requery не имеет никакого эффекта. Чтобы заставить это работать так, как вы хотите, вам действительно нужно реализовать listAdapter и обработать ваш курсор там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...