Android getView()只调用可见行?

时间:2011-04-27 03:24:27

标签: android android-listview

我的应用程序加载从远程XML文件填充的ListView。需要在多个http请求中获取第一行之后的每一行。

例如,XML文件类似于:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <item>available content</item>
 <item>unavailable</item>
 <item>unavailable</item>
 <item>unavailable</item>
 <item>unavailable</item>

由此,我创建了一个映射到适配器的ArrayList。

在我的GetView()中,我检查ArrayList中的字符串“不可用”,如果找到,启动AsyncTask,我将相应的行,位置和URL传递给(XML文件中的每个项目也有一个网址价值)。然后在onPostExecute中,我使用row.findViewById()和setText()来更新ListView,其中包含由不可用项目的URL提取的新内容

这一切都有效,但仅适用于屏幕上可见的行。例如如果总共有10行,并且我一次在屏幕上看到5,当我向下滚动到底部时,在更新为正确的值之前,前五个的相同值会显示一秒。然后当我向上滚动时会发生同样的事情。那么,我可以使用的东西就像getView一样,并将每一行传递给AsyncTask,但对于整个ListView只能调用一次吗?

1 个答案:

答案 0 :(得分:0)

呃,不是真的。我会说你正确的做法:在getView()中执行它,但AsyncTask实际上更新了ArrayList中的项目,因此它不会再次触发。如果您使用ArrayList支持,则只需更改该位置的值,然后执行<adapter>.notifyDataSetChanged();即可更新。