inp*_*put 4 java android listview adapter
这是我使用自定义Listview适配器的教程.我遇到的问题是,当我尝试清除适配器时,应用程序崩溃并抛出java.lang.UnsupportedOperationException
if(adapter != null) {
adapter.clear();
}
Run Code Online (Sandbox Code Playgroud)
更新的代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
看一下,似乎用数组初始化适配器是个问题.请参阅ArrayAdapter.remove的UnsupportedOperationException,并且无法在ListView中修改ArrayAdapter: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.
Run Code Online (Sandbox Code Playgroud)
如果你感到懒惰,您可以转换array成ArrayList这样
ArrayList<Weather> weatherList = new ArrayList<Weather>();
weatherList.addAll(Arrays.asList(weather_data));
Run Code Online (Sandbox Code Playgroud)
要ArrayList在您的WeatherAdapter类中完成转换,您将需要删除它Weather data[] = null;及其所有引用(例如在构造函数内),因为ArrayAdapter为您保存数据,您可以使用getItem访问它
所以,你的内部getView功能,你会改变Weather weather = data[position];对Weather weather = getItem(position);
更新 修改您的udated代码
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1733 次 |
| 最近记录: |