【问题标题】:Is it okay to change a ListView's adapter dynamically?可以动态更改 ListView 的适配器吗?
【发布时间】:2012-04-10 06:04:38
【问题描述】:

我想根据需要更改ListView 的ArrayAdapter,而不是创建多个活动。我在API 中没有看到任何关于是否可以多次致电setAdapter() 的内容。

更具体地说,假设我想启动一个具有ListView 的活动。在此示例中,ListView 使用来自CategoryArrayAdapter 的listView.setAdapter(this) 进行初始化。

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

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

【问题讨论】:

    标签: android listview android-arrayadapter listadapter


    【解决方案1】:

    我没有在 API 中看到任何关于是否可以多次调用 setAdapter() 的信息。

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

    这正是Adapter 存在并在API 中提供的原因。每个列表项的实际内容(模型)及其呈现方式(视图)是在 android.widget.Adapter 内部隔离和实现的,而不是直接绑定到 android.widget.AdapterView。只要您的适配器正确实现,您就可以交换/更改绑定到 ListView 的实际底层适配器,只需调用 setAdapter() 方法即可。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 2016-04-05
        • 2016-11-25
        • 1970-01-01
        相关资源
        最近更新 更多