2014-10-09 3 views
0

나는 그들이 네트워크 (ArrayList에 또는 항목) 목록보기 항목을 응답하는 시간을 기준으로 네트워크 응답업데이트 목록보기 세포 인덱스가

에 따라 보는 방식을 변경리스트 뷰에서 요소가 변경 될 수 있습니다/항목 수 다른 인덱스에있을

내가 할 수있는 일

: 다시 (가장 업데이트 된 형태로)리스트에있는 모든 항목을 반환하는 서버로 대체 API 호출을 확인하고 어댑터에 notifyDataSetChanged() 전화

하지만 이것은 프로세스 낭비처럼 보입니다. 해당 개체에 대한 rraylist를 업데이트 한 다음 호출하십시오. notifyDataSetChanged()

대신 네트워크 호출 또는 서비스를 시작한 어댑터 항목을 추적 할 수있는 어댑터 내에 BroadcastReceiver와 같은 것을 사용하는 방법이 있습니까? 어떤 사람들은보기가 현재 재활용되지 않은 경우에만 수신기에 응답합니다.

답변

0

당신이 묘사 한 내용은 정말 높은 수준의 개요이므로 최선의 방법으로 답하기 어렵습니다. 나는 동등한 고차원의 대답을해야 할 것이다. 잘하면 도움이됩니다.

해당 항목의 어댑터에서 ArrayList을 검색하는 방법은 많지 않습니다. 좋은 생각 :

ArrayList에 의해 뒷받침되는 사용자 지정 어댑터를 만들 수 있으며 데이터의 Set도 유지 관리 할 수 ​​있습니다. 이점은 아이템이 O (1)이라는 것을 찾는 것입니다.하지만 추가 나 제거에서는 하나가 아닌 두 개의 콜렉션을 수정해야합니다. 그러면 약간의 속도 저하가 발생할 것입니다. 개인적으로이 솔루션을 매우 복잡한 어댑터/목록보기에 한 번 사용해야했습니다. 놀랍게도 ListSet을 유지하는 데 속도가 느려지지 않고 전반적으로 잘 작동합니다.

데이터에 일종의 고유 한 ID가 연결되어있는 경우 비슷한 방법을 사용할 수 있습니다. 어떤 경우에는 Map의 데이터를 만들고 values() 맵을 사용하여 어댑터에 사용할 List을 얻을 수 있습니다. 키를 사용하여 필요한 데이터를 신속하게 찾고 업데이트합니다. 이 아이디어는 Set 아이디어보다 어려울 수도 있고 그렇지 않을 수도 있습니다. 또한 SparseArray (각 항목에 대해 고유 한 int 값)으로 데이터를 가져올 수 있다면 SparseArrayAdapter을 사용하면 O (로그 n) 검색 시간을 얻을 수 있습니다. 물론 의미있는 방식으로 데이터를 정렬 할 수있는 능력이 느슨합니다.

나는 실현 가능성이 얼마나되는지 BroadcastReceiver이 확실하지 않습니다. 각 항목의 객체 인스턴스가 네트워크 요청/응답을 자체적으로 제어하는 ​​것처럼 보일 수도 있지만, 까다 롭고 이상하게 보일 것입니다. 항상 CursorAdapter을 사용하는 옵션이 있습니다. 모든 데이터를 DB에 저장하십시오. 네트워크 호출을 통해 DB를 업데이트 한 다음 CursorAdapter에 반영 할 수 있습니다.

+0

커서 어댑터가 올바른 작업 일 수 있습니다. – CQM