gpt4 book ai didi

java - 更新 AsyncTask 内的 ArrayAdapter 的有效方法?

转载 作者:行者123 更新时间:2023-12-02 05:24:55 25 4
gpt4 key购买 nike

我正在使用 XMLPullParser 来解析 XML feed,然后将传入的数据存储在列表中。问题是,我有多个提要从中提取数据和一个列表,

我正在做的是,

我创建了一个 Arraylist 来存储从 XML 中提取的数据,

protected ArrayList<String> feed_XMLs = new ArrayList<String>();

由于我有多个提要,因此我将它们存储在一个数组中

  public static String XML_URL[] = { "http://Feed1",
"http://Feed2",
"http://Feed3",
};

然后我在 AsyncTask 中使用 PullParser 从每个 URL 中提取数据并创建其对象,

for (int x = 0; x < XML_URL.length; x++){
GetXMLTitles xmlFirst = new GetXMLTitles(x);
xmlFirst.execute();
}

我在 AsyncTask 类中创建了一个构造函数,以便在每次迭代时选择不同的 URL -> new GetXMLTitles(x)

在每次迭代中,都会选择一个 URL,然后提取标题并将其存储在 ArrayList feed_XMLs 中。

稍后在 AsyncTask 的 onPostExecute 方法中,该数据现在传递给 ArrayAdapter,

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, feed_XMLs);

setListAdapter(adapter);

仅此而已。

最终输出是一个巨大的 ArrayList feed_XMLs,其中包含数百个标题。

在每次迭代中,都会选择新的 URL,并且 feed_XMLs ArrayList 会更新并显示在屏幕上。

例如,

在第一次迭代时,选择第一个 URL,所有标题都存储在 feed_XMLs 中,feed_XMLs 发生更改。这些标题显示在屏幕上。

在第二次迭代中,选择第二个 URL,并将所有标题附加到 feed_XMLs 中...并且该过程对于每次迭代都是连续的。

问题是,

每次迭代时滚动条都会在屏幕顶部移动,

例如,

如果我一直向下滚动并且 ArrayAdapter 已更新,我将自动在屏幕上一直向上移动,这不是我想要的。

我希望当 ArrayAdapter 中更新新数据时我的屏幕保持在原来的位置。

我怎样才能实现这个目标?这可能吗?

我已经尝试过,scrollview.fullScroll(View.FOCUS_DOWN);但这也不起作用。

有没有办法更新ArrayAdapter,使其对滚动没有影响?

最佳答案

我认为问题在于您在每个 onPostExecute 中创建一个新的适配器

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, feed_XMLs);

setListAdapter(adapter);

只需创建一次适配器并更新其数据。

类似这样的事情:

if(adapter!=null) {
adapter.notifyDataSetChanged();
}

编辑:

谢谢,这个解决方案有效!

我在主类中创建了适配器,如下所示,

ArrayAdapter<String> adapter;

然后在onPostExecute中,

if (adapter == null) {
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, feed_XMLs);
setListAdapter(adapter);
}

else {
adapter.notifyDataSetChanged();
}

关于java - 更新 AsyncTask 内的 ArrayAdapter 的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com