android中adapter.clear()引起的错误
来源:互联网 发布:北京海洋馆客流量数据 编辑:程序博客网 时间:2024/06/07 03:53
public class MainActivity extends Activity implements OnClickListener {ArrayAdapter<String> adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.paomadeng);Spinner spinner = (Spinner) findViewById(R.id.spinner);String[] strArray = new String[]{"杭州","上海", "南京", "北京", "广州", "深圳"};adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, strArray);spinner.setAdapter(adapter);spinner.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {System.out.println(adapter.getItem(position));}@Overridepublic void onNothingSelected(AdapterView<?> parent) {System.out.println("nothing selected");}});Button btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(this);}@Overridepublic void onClick(View v) {adapter.clear();}}
点击这里的Button,也就是执行onClick()之后,发生如下错误:
02-16 13:50:21.062: E/AndroidRuntime(29353): FATAL EXCEPTION: main02-16 13:50:21.062: E/AndroidRuntime(29353): java.lang.UnsupportedOperationException02-16 13:50:21.062: E/AndroidRuntime(29353): at java.util.AbstractList.remove(AbstractList.java:638)02-16 13:50:21.062: E/AndroidRuntime(29353): at java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:75)02-16 13:50:21.062: E/AndroidRuntime(29353): at java.util.AbstractList.removeRange(AbstractList.java:658)02-16 13:50:21.062: E/AndroidRuntime(29353): at java.util.AbstractList.clear(AbstractList.java:466)02-16 13:50:21.062: E/AndroidRuntime(29353): at android.widget.ArrayAdapter.clear(ArrayAdapter.java:258)
http://stackoverflow.com/questions/10504353/adapter-clear-crashes-android-app
You are probably getting an UnsupportedOperationException
, right? This is because the adapters get initialised with an array of objects, which it interally converts to an AbstractList
, which cannot be modified.
To solve your problem, you simply need to feed something that implements the List<?>
interface to the adapter. Example:
public ArrayAdapter(Context context, int resource, T[] objects) { init(context, resource, 0, Arrays.asList(objects)); }
可以看到这里的源码是调用了Arrays.asList(),我们知道这个Arrays.asList()会返回一个不可修改的ArrayList,而且这个ArrayList是Arrays里面的。
正确的方式如下:
public class MainActivity extends Activity implements OnClickListener {ArrayAdapter<String> adapter;List<String> datas = new ArrayList<String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.paomadeng);Spinner spinner = (Spinner) findViewById(R.id.spinner);datas.add("杭州");datas.add("上海");datas.add("南京");datas.add("北京");datas.add("广州");datas.add("深圳");adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, datas);spinner.setAdapter(adapter);spinner.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {System.out.println(adapter.getItem(position));}@Overridepublic void onNothingSelected(AdapterView<?> parent) {System.out.println("nothing selected");}});Button btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(this);}@Overridepublic void onClick(View v) {datas.clear();adapter.notifyDataSetChanged();}}
0 0
- android中adapter.clear()引起的错误
- android中string.xml引起的常见编译错误
- Hibernate session.clear()引起的一个问题
- MyEclipse中消除frame引起的错误
- VC中,中文注释引起的错误
- Android中Adapter的学习
- Android中Adapter的一点一滴
- 关于Android的Adapter错误记录
- 修改Android Maniifest中package name引起的R引用错误
- 由Adapter模式引起的联想
- OPENSSL引起的错误
- strlen引起的错误
- 注释引起的错误
- Android 中 Handler 引起的内存泄露
- Android 中 Handler 引起的内存泄露
- Android中Handler引起的内存泄露
- Android中Handler引起的内存泄露
- Android中Handler引起的内存泄露
- Android之fragment生命周期
- 2016年做好跨境电商,出口物流更重要
- 安全测试工具IBM Rational AppScan的使用教程
- 设计模式-外观
- springmvc学习-环境搭建(mac)
- android中adapter.clear()引起的错误
- 如何快速制作EDIUS中的黑场过渡
- UIBezierPath精讲
- 尽情享受美妙音乐----英国PURE公司Jongo S3无线音箱一周使用体验
- java 修改web-root folder 的值
- weChat开发
- New Year and Days
- Mongodb aggregate timezone 问题
- 错误:HttpServlet was not found on the Java