可以动态更改ListView的适配器吗?

时间:2012-03-26 17:53:59

标签: android listview android-arrayadapter listadapter

我想根据需要更改ArrayAdapter的{​​{1}},而不是创建多个活动。我在API中没有看到任何提及是否可以多次拨打ListView的问题。

更具体地说,我想开始一个setAdapter()的活动。在此示例中,ListView初始化为ListView,例如listView.setAdapter(this)

然后用户选择一个类别。在不启动新活动的情况下,代码将为同一CategoryArrayAdapter设置新的适配器。新的适配器,例如ListView调用ItemArrayAdapter

是否有人有成功完成此操作的经验或知道为什么不应该这样做的具体原因?

2 个答案:

答案 0 :(得分:31)

  

我没有在API中看到是否可以多次调用setAdapter()。

简单的答案是肯定的,之前我做过类似的事情。

这就是为什么Adapter存在并在API中提供的原因。每个列表项的实际内容(Model)及其呈现方式(View)是在android.widget.Adapter中隔离并实现的,而不是直接绑定到android.widget.AdapterView。只要正确实现了适配器,就可以通过调用setAdapter()方法来交换/更改绑定到ListView的实际底层适配器。

答案 1 :(得分:1)

重置适配器是可以的,但请注意,这样做时可能会出现GUI故障,因为正在更改其适配器的视图必须使用新数据重新绘制。除此之外你应该没事。