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

我在做的是

我创建了一个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();
}


编辑:

谢谢您这个解决方案的作品!

我是这样在主类中创建adapter的,

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();
        }

07-28 01:53
查看更多