2013-04-23 4 views
0

나는 클릭시 펼쳐지는 listViewItems가 포함 된 사용자 정의 ListView를 작성하고 있습니다. 첫 번째 문제는 큰 문제없이 만들었으며 listViewItems는 클릭시 올바르게 확장됩니다.ListViewAdaper, getView (XXX) 처리에 따라 다시 그리지 않는 항목

이제 다른 ListView를 만들려고합니다. 두 가지 이상의 항목이 포함되어 있습니다.이 때문에 becook는 데이터 목록 대신보기 목록을 포함하도록하는 것이 편리하다는 것을 알았습니다. getView (XX)에 의해 뷰가 요구되었을 때의 뷰

모든 것이 올바르게 작동합니다. 단, 다시 활동을 바꿀 때까지 새 목록의 항목이 확장되지 않습니다. 첫 번째 listview (몇 가지 단점이 있음)에서 구현을 모방하기 위해 테스트 한 결과 올바르게 다시 그릴 수 있습니다.

주요 차이점은이 두 줄입니다. 첫 번째 줄은 두 번째 줄을 다시 그리며 두 번째 줄은 다시 그려지지 않습니다.

return new TransactionChild(context, attrs, transactions.get(position)); 

.

return (View) children.get(position); 

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 전체 목록에서 강제로 다시 그리기를 시도하십시오 (확대보기에서 나머지를 아래로 이동 ...)? 또는 ListView 또는 어댑터 중 하나를 깔끔하게 사용할 수 있습니까?

도움말 좋은 것입니다 : D

+0

ExpandableListView를 사용해 보셨습니까? –

+0

예, 처음 ListView를 만들었습니다. 이것이 올바른 접근 이었지만 expandablelistView는 부모 그룹의 자식을 보여주는 폴더 구조 ei와 같은 것을 만들기 위해 작성되었습니다. 나는 하나의보기를 더 크게 만들고 싶다. expandableListView는 listView보다 잘하지 않는다. :) – SverkerSbrg

답변

0

그룹이 자녀가 오픈 그룹의 다른 레이아웃을 가지고 폐쇄하지 않는 경우 당신은 ExpandableListView를 사용할 수 있습니다.

정상적인 ListView를 사용하는 경우 어댑터의 getItemViewType() 메소드를 사용하는 것이 좋습니다. 이렇게하면 일반 및 클릭 한 항목 목록을 삭제하고 getView에서 유형을 확인하고 레이아웃을 변경할 수 있습니다. 또한 클릭 리스너에서 클릭 한 항목의 유형을 변경하고 변경된 데이터를 알립니다.

+0

그래서 getView에 새로운 뷰를 제공하지 않는 것은 어리석은가요? :) – SverkerSbrg

+0

ViewType 메소드를 사용하면 안드로이드가이를 처리 할 것입니다. getView를 호출하기 전에, android는 getItemViewType을 호출 할 것이고 getView에서 보내진 convertView는 올바른 타입 뷰를 가질 것이다. 그래서 안드로이드는 다른 뷰 유형의 캐시를 유지합니다. 기본적으로 뷰를 표시 할 뷰를 getItemViewType으로 이동하고 뷰를 가져올 때 유형 만 가져오고, 필요한 경우 뷰를 작성하고 항목을 설정합니다. –

+0

오, 나는 몰랐다. 내가 그것을 구현하려고합니다 감사합니다. – SverkerSbrg

관련 문제