XMLPullParser를 사용하여 XML 피드를 구문 분석 한 다음 들어오는 데이터를 목록에 저장하고 있습니다. 문제는 , 나는, AsyncTask에서 ArrayAdapter를 효율적으로 업데이트하는 방법은 무엇입니까?
내가 내가 XML에서 가져온 데이터를 저장하기 위해 ArrayList를 생성한다 뭐하는 거지에서 데이터를 하나의리스트를 뽑아 여러 피드를protected ArrayList<String> feed_XMLs = new ArrayList<String>();
I 복수 급지하고 있으므로, 각 I 및 CREA URL로부터 데이터를 당겨
public static String XML_URL[] = { "http://Feed1",
"http://Feed2",
"http://Feed3",
};
그리고 그때 내부 PullParser AsyncTask를 사용하는 배열에서 그들을 저장 테 그 목적,
for (int x = 0; x < XML_URL.length; x++){
GetXMLTitles xmlFirst = new GetXMLTitles(x);
xmlFirst.execute();
}
내가 반복 될 때마다 다른 URL을 선택 AsyncTask를 클래스 내부의 생성자를 생성 - 각 반복에>
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를 스크롤하는 데 아무런 영향을주지 않는 방식으로 업데이트 하시겠습니까 ??
, 그것은 자동으로 모든 반복에 생성하지 않을을 만들어? feed_XML 데이터가 업데이트되지 않았으므로 주 활동 클래스 내에 ArrayAdapter를 작성할 수 없습니다. 비동기 onPostExecute 내에 ArrayAdapter를 작성해야하지만 한 번만 작성하는 방법이 있습니까? P.S : 해결 방법이 작동하지 않습니다. –
이 솔루션은 어댑터 인스턴스를 하나만 유지하면 작동합니다. 메인 액티비티에서 어댑터에 대한 참조를 유지하고, 어댑터를 한 번만 작성한 다음 (onPostExecute) 어댑터를 업데이트하십시오. – sotcha