我正在使用XMLPullParser来解析XML提要,然后将传入的数据存储在List中。 问题是,我有多个提要来从中提取数据和单个列表,
我在做的是,
我创建了一个Arraylist来存储从XML中提取的数据,
protected ArrayList<String> feed_XMLs = new ArrayList<String>();
由于我有多个Feed,因此我将它们存储在一个数组中
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 - &gt; 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并在屏幕上显示。
例如,
在第一次迭代时,选择了第一个网址,并且所有标题都存储在feed_XMLs
中,feed_XMLs
已更改。这些标题显示在屏幕上。
在第二次迭代时,选择第二个URL并将所有标题附加在feed_XMLs
...中,并且每次迭代都会持续进行。
问题是,
滚动条在每次迭代时都会在屏幕顶部移动,
例如,
如果我一直向下滚动并且ArrayAdapter已更新,我将自动在屏幕上一直向上移动,这不是我想要的。
我想让我的屏幕保持在ArrayAdapter中更新新数据时保持原样。
我怎样才能做到这一点?它甚至可能吗?
我试过了scrollview.fullScroll(View.FOCUS_DOWN);
,但这也不起作用。
无论如何更新ArrayAdapter的方式是它在滚动中没有效果吗?
答案 0 :(得分:2)
我认为问题是您在每个 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();
}