自定义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); }