如何从通用适配器调用notifyDataSetChanged()

时间:2010-05-19 16:27:39

标签: android listview adapter listadapter

OnItemClickListener的{​​{1}}具有以下方法:

ListView

我希望适配器位于@Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) 刷新后面,我相信这是通过以下方式完成的:

ListView

如何使用BaseAdapter.notifyDataSetChanged() 方法中的parent参数执行此操作?到目前为止,我已经尝试过:

onItemClick

这会抛出一个错误,因为返回的对象是类parent.getAdapter().notifyDataSetChanged(); ,由于原因未知,它不是HeaderViewListAdapter的子类。

5 个答案:

答案 0 :(得分:5)

您还可以通过自定义适配器访问BaseAdapter,如以下代码片段所示:

public class HeaderViewListAdapter extends BaseAdapter {

...

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

...
}

答案 1 :(得分:5)

  

这会抛出一个错误,因为返回的对象是类   HeaderViewListAdapter,由于未知的原因不是它的子类   BaseAdapter。

((BaseAdapter) ((HeaderViewListAdapter)listView.getAdapter()).getWrappedAdapter()).notifyDataSetChanged();

答案 2 :(得分:2)

AFAIK,HeaderListView中没有任何方法可以进行数据刷新/重新加载。我能想到的唯一方法是重新分配适配器。

答案 3 :(得分:2)

使用游标时,无需调用任何方法来刷新适配器客户端。 相反,在执行任何操作后,您必须使用getContentResolver().notifyChange(uri, null);

“通知更改”

例如:

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

即使您使用的是自定义适配器,您的viewclient (Listview, Gridview, Whatever)也会自动更改。 希望这有帮助。

答案 4 :(得分:0)

我找到了更简单的方法..只需调用this.onCreate(null)即可重新加载完整的创建方法,但活动保持不变。