2012-09-19 145 views
4

This is the tutorial that I followed使用自定義Listview適配器。我遇到的問題是,當我嘗試清除該適配器,應用程序崩潰並引發java.lang.UnsupportedOperationException自定義ListView適配器拋出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); 
} 
+2

當你調用adapter.clear()的一些更多的上下文將有所幫助。也許你在一個線程中調用它。如果它不太長,我會發布你的所有代碼。如果是,只是周圍的代碼。此外,發佈您在日誌中看到的整個錯誤堆棧跟蹤。 – Pzanno

回答

6

環顧了一下,又好像初始化帶數組的適配器是個問題。使用ArrayList代替array像這樣

ArrayList<Weather> weather_data = new ArrayList<Weather>() 
weather_data.add(new Weather(R.drawable.weather_cloudy, "Cloudy")); 
// continue for the rest of your Weather items. 

如果你感覺懶得見UnsupportedOperationException with ArrayAdapter.removeUnable to modify ArrayAdapter in ListView: UnsupportedOperationException

試試,您可以將您的arrayArrayList這樣

ArrayList<Weather> weatherList = new ArrayList<Weather>(); 
weatherList.addAll(Arrays.asList(weather_data)); 

要完成轉換爲ArrayList在您的WeatherAdapter類,您將要刪除Weather data[] = null;和所有o f,將它的引用(如在構造函數中),因爲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); 
} 
+0

非常感謝你的詳細回覆。現在唯一的事情是,當我嘗試清除'ArrayList'時,它仍然不清楚,而是附加到前一個列表。我用代碼更新了問題。請檢查。 – input

+0

您仍然應該使用adapter.clear()方法而不是列表。 '''adapter.clear()'''仍然給你錯誤?順便說一句,我編輯了我的答案几次,所以你可能已經看到了最新的呢。 – Pzanno

+0

不,現在不會發生錯誤。它現在所做的就是將以前的列表數據添加到當前列表數據中,而不是刷新/替換它。 – input

相關問題