2014-07-06 3 views
0

내 코드에서 특정 조건이 충족되면 ListView (각 행에는 여러보기가 있음)의 각 행에 하나만 View을 업데이트해야합니다. 업데이트 된 조회 만 타겟팅하는 방법이 있습니까?Android : 목록보기 행 업데이트

플래그를 설정하고 notifyDataSetChanged()을 호출 해 보았습니다. 그러나 notifyDataSetChanged()이 현재 표시된 항목에 대해 getView(...) 호출을 완료하면 어떻게 알 수 있습니까?

+0

현재 보이는보기가 즉시 업데이트됩니다. 그러나 어댑터에서 화면을 들여다 볼 때마다보기가 다시 표시 될 수 있으므로 플래그는 상태를 유지해야합니다. –

+0

구현상의 이유로 뷰를 업데이트 한 직후 플래그를 AND해야합니다. 이 플래그는 일부 행 내용 만 업데이트해야 함을 나타냅니다. –

답변

0
Boolean updateViewsFlag = true; 

//의 getView 내부() : 현재보기의 위치가 ArrayList의 크기와 동일한 경우 notifyDataSetChanged()이 완료인지 아닌지

if(updateViewsFlag) { 
    //Suppose you want to update some text in a textView 
    textView.setText("updatedText"); 
    //Also, update the corresponsing value in the Collection, 
    //you're using to generate the ListView. 
    //Consider an ArrayList<String> for this case. 
    arrayList.set(position, "updatedText"); 
} else { 
    textView.setText(arrayList.get(position)); 
} 

알아하려면 확인합니다. 그럴 경우 모든보기가 새로 고쳐지고 플래그를 false로 설정할 수 있음을 의미합니다. 그러나 getView()은 여러 번 실행되므로 플래그 값을 불필요하게 변경하지 않도록하십시오.

0

getView 메소드에서 동일한 뷰 객체를 얻는다고 가정하는 것이 안전하지 않다고 생각합니다. 아래 솔루션을 사용하는 방법에 대해 알려주십시오. 설명이 정확하지 않기 때문에 How can I update a single row in a ListView?


사실 getChildAt도 훨씬 안전하지 않습니다,하지만 난이 작동하는 경우, 안드로이드 팀이 동작을 변경할 필요가 없다 생각합니다.
http://developer.android.com/reference/android/view/ViewGroup.html#getChildAt(int)