4

これは、カスタム 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);
}
4

1 に答える 1

6

少し調べてみると、配列を使用してアダプターを初期化することが問題のようです。UnsupportedOperationException with ArrayAdapter.removeおよびUnable to modified ArrayAdapter in ListView: UnsupportedOperationExceptionを参照してください。

like soのArrayList代わりに anを使ってみてください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.

怠惰な場合はarrayArrayListこのように変換できます

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

クラスへの変換を完了するには、データを保持し、getItem でアクセスできるため、そのすべての参照 (コンストラクター内など) を削除するArrayList必要があります。WeatherAdapterWeather data[] = null;ArrayAdapter

したがって、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);
}
于 2012-09-19T12:11:59.153 に答える