Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义ListView适配器引发UnsupportedOperationException_Java_Android_Listview_Adapter - Fatal编程技术网

Java 自定义ListView适配器引发UnsupportedOperationException

Java 自定义ListView适配器引发UnsupportedOperationException,java,android,listview,adapter,Java,Android,Listview,Adapter,使用自定义Listview适配器。我遇到的问题是,当我试图清除适配器时,应用程序崩溃并抛出java.lang.UnsupportedOperationException if(adapter != null) { adapter.clear(); } 更新代码: private void setListViewAdapterToDate(int month, int year, int dv) { if(summaryAdapter != null) { su

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

环顾四周,似乎用数组初始化适配器就是问题所在。看到和

尝试使用
ArrayList
而不是像这样的
数组

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.
要在
WeatherAdapter
类中完成到
ArrayList
的转换,您需要删除
WeatherData[]=null
及其所有引用(例如构造函数内部),因为
ArrayAdapter
为您保存数据,您可以使用

因此,在
getView
函数中,您可以更改
Weather-Weather=data[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);
}

当您调用adapter.clear()时,多了解一些上下文会有所帮助。也许你把它称为线程内部。如果不是太长的话,我会把你所有的代码都贴出来。如果是的话,只需要周围的代码。另外,发布您在日志中看到的整个错误堆栈跟踪。非常感谢您的详细回复。现在唯一的一件事是,当我试图清除
ArrayList
时,它仍然没有清除,而是附加到前面的列表中。我已经用代码更新了问题。请检查。您仍应使用adapter.clear()方法,而不是列表。
adapter.clear()
是否仍在提示错误?顺便说一句,我编辑了我的答案几次,所以你现在可能已经看到了最新的答案。不,现在没有给出错误。它现在所做的只是将以前的列表数据附加到当前列表数据,而不是刷新/替换它?你上面发布的代码是
weatherList.clear()使用数组列表和数组有什么区别??
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);
}