2011-04-27 1 views
1

내 응용 프로그램은 원격 XML 파일에서 채워진 ListView를로드합니다. 첫 번째 행 다음에 오는 각 행은 여러 HTTP 요청에서 가져와야합니다. 나는 어댑터에 매핑하는 ArrayList를을 작성, 이로부터Android getView()는 표시되는 행에만 필요합니까?

 
<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<item>available content</item> 
<item>unavailable</item> 
<item>unavailable</item> 
<item>unavailable</item> 
<item>unavailable</item> 

:

는 예를 들어, XML 파일과 같이 보입니다.

내 GetView()에서 ArrayList의 "사용할 수없는"문자열을 확인하고 발견되면 AsyncTask를 시작하여 해당 행, 위치 및 URL을 전달합니다 (XML 파일의 각 항목에도 url 값). 그런 다음 onPostExecute에서 row.findViewById() 및 setText()를 사용하여 ListView를 사용할 수없는 항목의 URL에서 가져온 새 내용으로 업데이트합니다.

이 방법은 모두 작동하지만 화면에 표시되는 행에만 적용됩니다. 예 : 총 행 수가 10 개이고 한 번에 화면에 5 개가 표시된 경우 맨 아래로 스크롤하면 올바른 값으로 업데이트하기 전에 첫 번째 5 개의 동일한 값이 잠시 표시됩니다. 그런 다음 다시 스크롤하면 똑같은 일이 발생합니다. 그래서, getView와 같은 역할을하고 AsyncTask에 각 행을 전달할 수있는 무언가가 있을까요?하지만 ListView 전체에 대해 한 번만 호출됩니다.

답변

0

어, 실제로는 아닙니다. 나는 당신이 올바르게하고 있다고 말하고 싶습니다 : getView()에서 수행하고 AsyncTask가 실제로 다시 발생하지 않도록 ArrayList의 항목을 실제로 업데이트하도록하십시오. ArrayList로 뒷받침된다면 그 위치에서 값을 변경 한 다음 <adapter>.notifyDataSetChanged();을 업데이트하면됩니다.

+0

어쩌면 내가 잘못하고 있었을 수도 있지만, 처음에는 시도했습니다. 각 ArrayList 객체는 HashMap 입니다. 나는 하나의 값에서 배열을 편집 할 방법을 찾지 못했습니다. array.get (position) .get ("key") .setValue ("new value")와 같은 soemthing 때문에 전체 HashMap을 제거해야했습니다. 건네받은 위치를 취득한 다음 이전 값과 새 값을 새 HashMap에 다시 추가 한 다음 새 HashMap을 동일한 위치의 ArrayList에 추가합니다. 그러나 이것은 올바르게 작동하지 않았고 항목이 반복되고 순서가 잘못되었습니다. 오류가 발생했을 수도 있지만 다시 살펴 보겠습니다 – aperture

+1

2 개의 필드 (예 : 값 (문자열))가있는 작은 사용자 정의 개체를 만드는 것이 더 쉽습니다. fetched (boolean 값은 false)와 toString 메서드 (값을 반환). aSyncTask는 가져온 필드를 true로 설정하고 값을 업데이트하고 getView() 테스트에서 가져온 값을 false로 설정하여 AsyncTask를 시작합니다. – Femi