2011-03-15 5 views
0

내가 ListView를 내부의 전망을 관리하는 방법 궁금리스트 뷰에서 뷰를 관리하는 방법.제대로

내가 ListView를 설정하는 사용자 정의 어댑터를 가지고,이 어댑터는의 getView 방법

public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      v = mInflater_.inflate(R.layout.news_newsentry, null); 
     } 

     final NewsItem newsItem = getItem(position); 

     if (newsItem != null) { 
      // Do stuff 
     } 

     return v; 

    } 

에게 무시하지만 것은 사용자가 항목을 클릭 할 때, 나는 약간을 만들기 위해보기를 변경한다는 것입니다 더 커. 잘 작동하지만 항목보기를 재활용하면 다른 항목을 표시하는 "큰"높이가 유지됩니다.

것을 방지하기 위해, 나는

변경 새로운보기 각 시간을 만들 수있는 코드를 변경 :

View v = convertView; 
    if (v == null) { 
     v = mInflater_.inflate(R.layout.news_newsentry, null); 
    } 

View v = mInflater_.inflate(R.layout.news_newsentry, null); 

문제는 지금까지 항목에서 사라 때 목록이 다시 나타나고 (목록이 스크롤 됨)보기가 완전히 새로 고치고 높이가 "작게"설정됩니다.

내 질문 다음 : 어떻게 다른 뷰와 뷰 재활용 덤비는없이이 자신의 특성을 유지하는 항목 뷰를 관리하는?

답변

0

난 당신이 목록에서 하나 개 이상의보기 유형에 대한 지원 내장의 ListView를 사용하여 원하는 결과를 얻을 수 있다고 생각합니다.

는 어댑터에서는

@Override 
    public int getItemViewType(int position) { 
     int type = 0; 
     if (position == mySelectedPosition) { 
      type = 1; 
     } 
     return type; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return 2; 
    } 

와 유사한 추가 방법 다음 당신의 getView 방법은 항목의 위치에 대한 올바른 유형의보기를 건네됩니다 구현합니다. 즉, 선택한 항목은 항상 재사용 할 수있는 "큰"보기가 제공됩니다. 때마다 성능과 메모리 이유로 권장하지 않는 새보기 만들기

.

+0

가 좋아, 그 해결책이 될 것 같다,하지만 각 목록 항목에 대한 구성의 모든 종류가있을 수있는 경우. 나 혼자서 모든 것을 추적해야합니까? – Jonas