2012-07-22 2 views
1

나는 listView를 가지고 있으며이를 누를 때 각 항목을 확장하려고합니다. 나는 그렇게하기 위해 다음과 같은 코드를 가지고있다. 나는 ViewStub을 팽창 시켜서 작업한다.목록의 여러보기에 부풀기

잘 작동합니다. 즉, 목록 항목을 누르면 실제로 팽창합니다. 여태까지는 그런대로 잘됐다.

그러나 내 목록이 길어서 목록을 아래로 스크롤하면 다른 항목도 늘어났습니다. 왜 그런지 전혀 모르겠습니다. 그리고 내가 다시 위로 스크롤 할 때 나는 원래 언론에 "수포로 돌아갔다"고 다른 일부 항목은 팽창하게되었습니다.

@override 
public void onListItemClick(ListView l, View v, int position, long id) { 


    ListView list = getListView(); 
    int start = list.getFirstVisiblePosition(); 
    for (int i = start, j = list.getLastVisiblePosition(); i <= j; i++) { 
     Cursor item = (Cursor) list.getItemAtPosition(i); 

     if (id == item.getLong(item.getColumnIndex(ItemColumns._ID))) { 
      View view = list.getChildAt(i - start); 

      ViewStub stub = (ViewStub) view.findViewById(R.id.stub); 
      if (stub != null) { 
       stub.inflate(); 

      }  
     } 
    } 
} 

도움이 될 것입니다!

답변

1

Android는보기를 ListView에서 재사용합니다. 그렇기 때문에 AdaptergetView(..) 방법에 convertView이 있습니다. 이 SO 게시물을 설명 할 것이다 : ListView reusing views when ... I don't want it to가 기본적으로 당신이해야 할 것입니다 현재 전개되는 항목의 Set을 보유하고 getView(..) 방법으로 조회 할 : 추가하려는 onListItemClick 방법 다음

if(mExpanded.contains(getItem(position))) { 
    //show expansion 
} else { 
    //hide expansion 
} 

을 다음

if(!mExpanded.remove(getListView().getItem(position))) { 
    mExpanded.add(getListView().getItem(position)); 
} 

Set가 변경되지 않은 경우이 항목을 제거 시도를하게됩니다 - 그 항목이 Set에 당신이 그것을 추가 할 다음 제거 할 수 없습니다입니다 ...