Алгоритмы ListAdapters и WrapperListAdapter - PullRequest
1 голос
/ 21 мая 2010

Эта логика записана в функции с подписью

private void showDialog(final AdapterView<? extends Adapter> parent,
     String title, String message, final Tag subject)

Есть ли лучший способ сделать это?

// refresh adapter
SimpleCursorAdapter adapter;
if (parent.getAdapter() instanceof WrapperListAdapter) {
    adapter = (SimpleCursorAdapter) ((WrapperListAdapter) parent.getAdapter()).getWrappedAdapter();
} else {
    adapter = (SimpleCursorAdapter) parent.getAdapter();
}
adapter.getCursor().requery();
adapter.notifyDataSetChanged();

Кроме того, есть ли смысл иметь AdapterView<? extends Adapter> в подписи, а не просто AdapterView<?>?

1 Ответ

1 голос
/ 22 мая 2010

Есть ли лучший способ сделать это?

Держитесь за свой Cursor объект и вызывайте requery(), вместо того, чтобы пытаться выкопать его из адаптера.

Кроме того, в идеале вам не нужно было бы вызывать notifyDataSetChanged() - CursorAdapter делает это автоматически, и, надеюсь, WrapperListAdapter подключится к CursorAdapter и будет каскадно выполнять операцию notifyDataSetChanged().

Кроме того, есть ли смысл иметь AdapterView в подпись, а не только AdapterView?

Этот синтаксис вызовет ошибку компилятора, если вы попытаетесь создать AdapterView на Integer, либо Button, либо Socket. Другими словами, это добавляет немного безопасности во время компиляции.

...