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

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

Stack Overflow用户
提问于 2012-03-13 09:29:02
回答 7查看 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

回答 7

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用户

发布于 2013-12-15 14:04:44

我建立在其他人的代码在线上,我创造了这个。只需在需要的地方使用这个类,而不是ArrayAdapter类。

代码语言:javascript
复制
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Build;
import android.widget.ArrayAdapter;

import java.util.Collection;
import java.util.List;

public class ArrayAdapterCompat<T> extends ArrayAdapter<T> {
    public ArrayAdapterCompat(Context context, int resource, List<T> entries) {
        super(context, resource, entries);
    }

    /**
     * Add all elements in the collection to the end of the adapter.
     * @param list to add all elements
     */
    @SuppressLint("NewApi")
    public void addAll(Collection<? extends T> list) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            super.addAll(list);
        } else {
            for (T element : list) {
                super.add(element);
            }
        }
    }

    /**
     * Add all elements in the array to the end of the adapter.
     * @param array to add all elements
     */
    @SuppressLint("NewApi")
    public void addAll(T... array) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            super.addAll(array);
        } else {
            for (T element : array) {
                super.add(element);
            }
        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9677172

复制
相关文章

相似问题

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