java - 自定义 ListView 适配器抛出 UnsupportedOperationException

标签 java android listview adapter

This is the tutorial that I followed使用自定义 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);
}

最佳答案

环顾四周,问题似乎是用数组初始化适配器。参见 UnsupportedOperationException with ArrayAdapter.removeUnable to modify ArrayAdapter in ListView: UnsupportedOperationException

尝试使用 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.

如果你觉得懒惰,你可以通过这种方式将你的array转换为ArrayList

ArrayList<Weather> weatherList = new ArrayList<Weather>();
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);
}

关于java - 自定义 ListView 适配器抛出 UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12494169/

相关文章:

java - 如何在 t :selectOneListbox? 中添加水平滚动条

android - 处理大量图像资源的最佳方法?

android - ListViewAnimations 库中的 ExpandableListItemAdapter 给我错误

javascript - 如何将动态 JSON 字符串转换为 javascript 数组

java - 我应该得到 "invalid"作为输出,但我得到 "valid"作为输出,不知道为什么输出是错误的

Java 解析日期 w/SimpleDateFormat

java - 如何刷新 Recyclerview 中的项目位置以进行过滤?

java - 从外部存储读取数据库文件

android - 找不到类 'android.view.autofill.AutofillManager

安卓 ListView : Updating invisible views or disabling recycling