首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ListViews -在API 11之前如何使用ArrayAdapter.addAll()函数?

ListViews -在API 11之前如何使用ArrayAdapter.addAll()函数?
EN

Stack Overflow用户
提问于 2012-03-13 09:29:02
回答 8查看 22.2K关注 0票数 17

我正在尝试用全新的ArrayList更新ListView。对于API11,它使用addAll(...)工作得很好方法,但这对于早期的API不可用。我不知道如何更新老版本的整个列表。

代码语言:javascript
运行
复制
ArrayAdapter<String> textList = new ArrayAdapter<String>(listener, R.layout.list_item, stringList);
listener.setListAdapter(textList);

后来..。

代码语言:javascript
运行
复制
textList.clear();
textList.addAll(stringList); <--- works fine for Android 3.0 (API Level 11) and beyond, but not before. 

在API11中引入addAll()之前,您是如何做到这一点的?谢谢。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-03-13 10:48:56

最简单的方法是避免在循环中使用ArrayAdapter.addAll()和ArrayAdapter.add(),就像idiottiger在他的回答中建议的那样。

如果您坚持使用ArrayAdapter.addAll(),简短的答案是自己动手做。查看android.widget.ArrayAdapter here的源代码,实际实现比您想象的要简单得多。有许多替代方案可以实现这一点,例如:

  • 选项1:实现自己的ArrayAdapter扩展android.widget.BaseAdapter,您可以完全控制私有实例变量和方法,并可以在自己的实现中定义任何您想要的方法。互联网上有很多教程讲述了如何创建自定义适配器,如herehere.
  • Option 2: Implement your own extends android.widget.ArrayAdapter,然后将所需的公共方法addAll()添加到您自己的ArrayAdapter实现中,您在android.widget.ArrayAdapter中没有私有成员的可见性,因此需要使用现有的公共API ArrayAdapter.add()在循环中添加每个单独的元素。

选项1是首选的,也是非常常用的,特别是在需要在ListView中呈现更复杂的自定义UI内容的情况下。

票数 11
EN

Stack Overflow用户

发布于 2012-09-07 22:48:44

下面是完整的代码块,它为安装了SDK_INT >= 11的安卓设备使用原生API (),并对API级别低于11的设备使用循环解决方案。

代码语言:javascript
运行
复制
@TargetApi(11)
public void setData(List<String> data) {
    clear();
    if (data != null) {
        //If the platform supports it, use addAll, otherwise add in loop
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            addAll(data);
        } else {
            for(String item: data) {
                add(item);
            }
        }
    }
}

当X小于11的AndroidManifest.xml中有一个@TargetApi(11)时,ADT 17会使用Lint注释来抑制Lint警告。有关更多信息,请参阅http://tools.android.com/recent/lintapicheck

票数 19
EN

Stack Overflow用户

发布于 2012-12-13 08:43:21

我结合了barbeau和Villarey的答案,我认为这是一个很好的解决方案:

代码语言:javascript
运行
复制
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void setData(List<String> data) {
    clear();
    if (data != null) {
        addAll(data);
    }
}


@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void addAll(String... items) {
    //If the platform supports it, use addAll, otherwise add in loop
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        super.addAll(items);
    }else{
        for(String item: items){
            super.add(item);
        }
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9677172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档