我正在使用XMLPullParser來解析XML源,然後將傳入的數據存儲在列表中。 問題是,我有多個飼料拉從數據和一個列表,更新AsyncTask內部的ArrayAdapter的有效方法?
什麼我做的是,
我創建了一個ArrayList來存儲從XML拉數據,
protected ArrayList<String> feed_XMLs = new ArrayList<String>();
由於我有多個Feed,我將它們存儲在一個陣列
public static String XML_URL[] = { "http://Feed1",
"http://Feed2",
"http://Feed3",
};
,然後我用PullParser內部的AsyncTask拉從每個URL和CREA數據TE其目的,
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,並更新ArrayList並將其顯示在屏幕上。
例如,
在第一次迭代中,第一URL被選擇,並且所有的標題被存儲在feed_XMLs
,feed_XMLs
被改變。這些標題顯示在屏幕上。
在第二次迭代中,選擇第二個URL並在feed_XMLs
中追加所有標題...並且該過程對於每次迭代都是連續的。
的問題是,
在每個迭代屏幕上方的滾動條動作,
例如,
如果我滾動一路下來,並一個ArrayAdapter被更新,我將自動移動到屏幕上,這不是我想要的。
我希望我的屏幕保持它在ArrayAdapter中更新新數據時的位置。
我該如何做到這一點?它甚至有可能嗎?我試過了,scrollview.fullScroll(View.FOCUS_DOWN);
但是那也行不通。
是否有無論如何更新ArrayAdapter的方式,它在滾動沒有任何影響?
因爲適配器是內部onPostExecute創建的,不會自動在每個迭代上創造的呢? 我不能在主活動類內創建ArrayAdapter,因爲那麼feed_XMLs數據不會更新,我必須在Async onPostExecute內部創建ArrayAdapter,但是如何僅創建一次? P.S:Y我們的解決方案不起作用 – 2014-10-01 18:57:35
當您保留適配器的一個實例時,該解決方案可以正常工作。只需在主活動中保留對適配器的引用,創建一次適配器(onPostExecute),之後只需更新適配器。 – sotcha 2014-10-01 19:03:19