mmo*_*mmo 57 android android-widget android-2.2-froyo
我正在使用一个ArrayAdapter<CharSequence>来填充要列出的项目android.widget.Spinner.这一切都很好.
但现在我想保持项目列表动态,即我希望能够在运行时添加/删除选择列表中的项目.但是,当我打电话adapter.add(item)或者adapter.remove(item)我总是得到一个时UnsupportedOperationException,即使ArrayAdapter该类的Javadocs 描述这两种方法可用于完全用于预期目的.
这是一个错误,真的没有实现或我在这里缺少什么?
Com*_*are 119
您可能使用普通Java数组(例如,String[])初始化了适配器.尝试使用实现java.util.List接口的东西(例如ArrayList<String>).
zer*_*021 21
我知道它已经晚了但只是一个简单的解释:因为方法Arrays.asList(T ... array)返回名为ArrayList的自定义内部类,它是只读的.如前所述,您需要提供完整的impl.例如java.util.ArrayList.
ben*_*nvd 16
这是源代码ArrayAdapter#remove:
public void remove(T object) {
if (mOriginalValues != null) {
synchronized (mLock) {
mOriginalValues.remove(object);
}
} else {
mObjects.remove(object);
}
if (mNotifyOnChange) notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)
唯一可以抛出的UnsupportedOperationException就是else-block中的行.所以问题是您使用的列表不支持删除项目.我的猜测是你正在使用一个数组.例如,尝试使用ArrayList.
编辑:是的,马克说的......
use*_*503 13
我遇到了同样的问题,我的数据保存在资源字符串数组中,所以我用createFromResource创建了ArraAdapter.
以下用于从资源String Array创建ArrayAdapter的代码解决了以下问题:
Resources res = getResources();
String[] cities = res.getStringArray(R.array.cities_array);
ArrayAdapter<CharSequence> adapter = new ArrayAdapter(
this,
android.R.layout.simple_spinner_item,
new ArrayList(Arrays.asList(cities)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33934 次 |
| 最近记录: |