ListView.setAdapter在三星Galaxy S2上调用两次未正确更新

时间:2014-07-23 17:17:57

标签: android listview listadapter

最初在我的片段中我打电话

listView.setAdapter(myAdapater);

此适配器有一个包含0个元素的列表,当发生这种情况时会插入一行占用整个列表的行(显示加载图像)。在api请求获取数据后,适配器将更新并

myAdapter.notifyDataSetChanged();

被调用。这在除三星Galaxy S2之外的所有手机上都能正常工作,加载行仍然是列表中的第一行,当你开始滚动时,你会看到预期的第二行进入视图。如果您从屏幕上滚动第一行然后返回屏幕,则会使用正确的行替换加载行。


第二次尝试 -

我没有以这种方式处理它,而是创建了第二个适配器

public class LoadingAdapter extends BaseAdapter {}

然后片段开始时:

listView.setAdapter(loadingAdapter);
在api请求之后

listView.setAdapter(myAdapter);

此时列表完全空白,但是应该呈现列表,只显示背景。我玩这个并且做了

listView.setAdapter(myAdapter);
listView.setAdapter(myAdapter);

导致出现同样的背景问题。

对任何建议开放!谢谢!

1 个答案:

答案 0 :(得分:0)

  

此适配器有一个包含0个元素的列表,当发生这种情况时会插入一行占用整个列表的行(显示加载图像)

这不是在适配器为空时专门显示视图的最佳方法。相反,当适配器为空时,您应该使用ListView的setEmptyView方法设置要显示的特定视图而不是ListView。通常,这应该是与ListView处于同一级别的视图(即,使用包含ListView和空视图的FrameLayout)。