我正在关注udacity的Sunshine教程,这是我的问题:
我有一个带有一些项目的ListView,取自ArrayAdapter:
List<String> weekForecast = new ArrayList<String>(Arrays.asList(data));
mForecastAdapter =
new ArrayAdapter<String>(
getActivity(),
R.layout.list_item_forecast,
R.id.list_item_forecast_textview,
weekForecast);
listView.setAdapter(mForecastAdapter);
在另一个函数中,作为后台任务,我更新了我的适配器:
if (result != null) {
mForecastAdapter.clear();
for(String dayForecastStr : result) {
mForecastAdapter.add(dayForecastStr);
}
mForecastAdapter.notifyDataSetChanged();
}
但出于某种原因,我得到了这些结果:
任何人都知道解决方案吗?
更新: weekForecast是一个方法变量,我声明它是一个类变量,现在我的更新方法是:
if (result != null) {
weekForecast.clear();
mForecastAdapter.clear();
for(String dayForecastStr : result) {
mForecastAdapter.add(dayForecastStr);
}
mForecastAdapter.notifyDataSetChanged();
}
UPDATE2:
我得到了解决方案,问题不是由类中的任何过程/变量引起的。
这是一个布局问题!我在layout.xml文件中使用<fragment>
作为主标记而不是<FrameLayout>
答案 0 :(得分:0)
解决方案很简单:在Listview中设置背景颜色,例如白。
答案 1 :(得分:0)
通常,最佳做法是制作reset()
或调用clear()
函数,以便在使用notifyDataSetChanged();
答案 2 :(得分:0)
我建议您使用列表weekForecast
而不是更改适配器。试试这段代码
if (result != null) {
weekForecast.clear();
for(String dayForecastStr : result) {
weekForecast.add(dayForecastStr);
}
mForecastAdapter.notifyDataSetChanged();
}
UPD:如果weekForecast
是方法的本地,则将其设为类变量