我正在尝试用全新的ArrayList更新ListView。对于API11,它使用addAll(...)工作得很好方法,但这对于早期的API不可用。我不知道如何更新老版本的整个列表。
ArrayAdapter<String> textList = new ArrayAdapter<String>(listener, R.layout.list_item, stringList);
listener.setListAdapter(textList);
后来..。
textList.clear();
textList.addAll(stringList); <--- works fine for Android 3.0 (API Level 11) and beyond, but not before.
在API11中引入addAll()之前,您是如何做到这一点的?谢谢。
发布于 2012-09-07 22:48:44
下面是完整的代码块,它为安装了SDK_INT >= 11的安卓设备使用原生API (),并对API级别低于11的设备使用循环解决方案。
@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。
发布于 2012-12-13 08:43:21
我结合了barbeau和Villarey的答案,我认为这是一个很好的解决方案:
@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);
}
}
}
发布于 2013-12-15 14:04:44
我建立在其他人的代码在线上,我创造了这个。只需在需要的地方使用这个类,而不是ArrayAdapter
类。
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);
}
}
}
}
https://stackoverflow.com/questions/9677172
复制相似问题