2011-01-17 7 views
6

아이템 목록을 ListView로 반복하고 싶습니다. 이 코드는 표시 항목 수만 반환하는 getChildCount() 함수의 이상한 동작으로 인해 모든 항목을 목록으로 반복하기에 충분하지 않습니다. 안드로이드에서 ListView 아이템 반복하기

for (int i = 0; i < list.getChildCount(); i++) { 
    item = (View)list.getChildAt(i); 
    product = (Product)item.getTag(); 
    // make some visual changes if product.id == someProductId 
} 

내 화면이 표시

(7 개) 결과 목록에 7 개 이상의 항목이있을 때, 그것은 8 항목 정도에 액세스 할 수 없습니다 .. 만 표시되는 항목은 ..

나는 반복자를 사용해야 대신에?

감사합니다.

당신은 그것을 확인하기 위해 내부 목록 어댑터의 getView() 방법을 사용자 정의하고 수표를 둘 필요가
+0

어떻게 데이터를 채우고 있습니까? 어댑터를 사용하는 경우 목록 어댑터 – Reno

답변

1

경우 현재 항목의 ID가 일치 : 일반적으로 만 표시되는 항목은 특정 시간에 존재하기 때문에

Product product = items.get(position); 
if(product.id == someProductId) { 
    //make visual changes 
} else { 
    //reset visual changes to default to account for recycled views 
} 

,의 getView 더 많이 볼 필요가있을 때마다 호출됩니다. 일반적으로 목록에있는 현재 보이지 않는 항목의보기를 재사용합니다 (따라서 조건이 일치하지 않으면 변경 사항을 재설정해야하는 이유).

+0

안녕 kcoppock의 getCount() 메서드를 덮어 씁니다. 답장을 보내 주셔서 감사합니다. 이제 스크롤 할 때까지 UI의 보이는 부분을 업데이트하지 않는다는 점을 제외하고는 예상대로 작동합니다. UI 새로 고침을 트리거 할 수있는 이벤트가 있습니까? – pocoa

+1

예,'listView.notifyDatasetChanged();'를 호출 할 수 있습니다. ListAdapter가 새로 고침되지만 스크롤하기 전에 올바른 것이어야합니다. getView는 각 뷰가 빌드 될 때 호출됩니다. ListAdapter의 코드를 원래 질문에 게시 할 수 있습니까? – kcoppock

+0

도움 주셔서 감사합니다. 늦게 받아 들여서 너무 유감입니다. 나는 이미 내가 받아 들였다고 생각했다. 건배. – pocoa

0

ListView (7)의보기 수가 어댑터의 항목 수 (7 개 이상)와 다릅니다. BaseAdapter를 사용해보십시오.

1

그래서 @kcoppock은 첫 번째 문제를 해결했습니다. 다른 문제가있는 것 같습니다. 보기 항목을 업데이트하는 방법?

  1. 과 같이 자신의 목록보기 항목을 만들 : 목록보기 항목 레이아웃 파일에

    public class MyListItem extends RelativeLayout { 
    ... 
    } 
    

    : 안드로이드 SMS 응용 프로그램은 한 가지 방법을 보여줍니다

    < MyListItem android:layout_width=.....> 
    ... 
    </ MyListItem > 
    
  2. 과에 코드에서보기 항목을 볼 수있는 경우 데이터 변경 리스너로 MyListItem을 등록하십시오 (데이터는 사용자의 책임입니다). 데이터가 변경되면 항목을 직접 업데이트 할 수 있습니다.

자세한 내용은 SMS 응용 프로그램 소스 코드를 확인하십시오.

관련 문제