Как вызвать notifyDataSetChanged () из универсального адаптера - PullRequest
4 голосов
/ 19 мая 2010

An OnItemClickListener для ListView имеет следующий метод:

@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id)

Я бы хотел иметь адаптер за обновлением ListView, и я считаю, что это делается с помощью:

BaseAdapter.notifyDataSetChanged()

Как использовать параметр parent в методе onItemClick для этого? Пока я пробовал:

parent.getAdapter().notifyDataSetChanged();

Это приводит к ошибке, поскольку возвращаемый объект относится к классу HeaderViewListAdapter, который по неизвестным причинам не является подклассом BaseAdapter.

Ответы [ 5 ]

5 голосов
/ 02 июля 2014

Это выдает ошибку, потому что возвращаемый объект имеет класс HeaderViewListAdapter, который по неизвестным причинам не является подклассом BaseAdapter.

((BaseAdapter) ((HeaderViewListAdapter)listView.getAdapter()).getWrappedAdapter()).notifyDataSetChanged();
5 голосов
/ 16 марта 2011

Вы также можете получить доступ к BaseAdapter через свой пользовательский адаптер, как показано в следующем фрагменте кода:

public class HeaderViewListAdapter extends BaseAdapter {

...

  @Override
  public void notifyDataSetChanged() {
    super.notifyDataSetChanged();
  }

...
}
2 голосов
/ 22 февраля 2011

Вам не нужно вызывать какой-либо метод для обновления клиента адаптера при работе с курсором. Вместо этого после любой операции вы должны «Уведомить об изменениях», используя getContentResolver().notifyChange(uri, null);

Например:

context.getContentResolver().update(SomeURI.CONTENT_URI, values, null,null);
context.getContentResolver().notifyChange(SomeURI.CONTENT_URI, null);

Ваш viewclient (Listview, Gridview, Whatever) изменится автоматически, даже если вы используете пользовательский адаптер или нет. Надеюсь, что это поможет.

2 голосов
/ 19 мая 2010

AFAIK, в HeaderListView нет метода для обновления / перезагрузки данных. Единственный способ сделать это - переназначить адаптер.

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

Я нашел гораздо более простой способ ... просто вызов this.onCreate(null), который перезагрузит завершенный метод создания, но действие останется таким же.

...