自定义ListView适配器抛出UnsupportedOperationException
这是我使用自定义Listview适配器的教程 。 我遇到的问题是,当我尝试清除适配器时,应用程序崩溃并抛出java.lang.UnsupportedOperationException
if(adapter != null) { adapter.clear(); }
更新的代码:
private void setListViewAdapterToDate(int month, int year, int dv) { if(summaryAdapter != null) { summaryAdapter.clear(); } setListView(month, year, dv); summaryList.addAll(Arrays.asList(summary_data)); summaryAdapter = new SummaryAdapter(this.getActivity().getApplicationContext(), R.layout.listview_item_row, summaryList); summaryAdapter.notifyDataSetChanged(); calendarSummary.setAdapter(summaryAdapter); }
看一下,似乎用数组初始化适配器是个问题。 请参阅ArrayAdapter.remove的UnsupportedOperationException,并且无法在ListView中修改ArrayAdapter:UnsupportedOperationException
尝试使用ArrayList
而不是像这样的array
ArrayList weather_data = new ArrayList () weather_data.add( new Weather(R.drawable.weather_cloudy, "Cloudy") ); // continue for the rest of your Weather items.
如果你感觉很懒,可以用这种方式将array
转换为ArrayList
ArrayList weatherList = new ArrayList (); weatherList.addAll(Arrays.asList(weather_data));
要完成WeatherAdapter
类中ArrayList
的转换,您需要删除Weather data[] = null;
以及它的所有引用(例如在构造函数中),因为ArrayAdapter
为您保存数据,您可以使用getItem访问它
因此,在getView
函数内部,您将更改Weather weather = data[position];
Weather weather = getItem(position);
更新使用修改您的更新代码
private void setListViewAdapterToDate(int month, int year, int dv) { setListView(month, year, dv); if(summaryAdapter != null) { summaryAdapter.clear(); summaryAdapter.addAll( summaryList ); summaryAdapter.notifyDataSetChanged(); } else { summaryList.addAll(Arrays.asList(summary_data)); summaryAdapter = new SummaryAdapter(this.getActivity().getApplicationContext(), R.layout.listview_item_row, summaryList); } calendarSummary.setAdapter(summaryAdapter); }