我正在使用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();
}