ListView不会删除旧文本,只覆盖新文本

时间:2016-04-21 07:03:33

标签: android listview android-arrayadapter

我正在关注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();         
}

但出于某种原因,我得到了这些结果:

before updating After updating

任何人都知道解决方案吗?

更新: weekForecast是一个方法变量,我声明它是一个类变量,现在我的更新方法是:

if (result != null) {
   weekForecast.clear();
   mForecastAdapter.clear();
   for(String dayForecastStr : result) {
      mForecastAdapter.add(dayForecastStr);
   }
   mForecastAdapter.notifyDataSetChanged();         
}

----------

UPDATE2:

我得到了解决方案,问题不是由类中的任何过程/变量引起的。 这是一个布局问题!我在layout.xml文件中使用<fragment>作为主标记而不是<FrameLayout>

3 个答案:

答案 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是方法的本地,则将其设为类变量