2014-10-18 5 views
0

ListView에 대한 확장 가능 항목을 생성했으며보기가 올바르게 재활용되었습니다. 문제는 이러한 항목 중 하나를 확장하면 일부 숨겨진 항목도 확장되어 명확하게 원하지 않는 항목입니다.Android ListView recycled - 확장 가능 항목

예를 들어 목록의 두 번째 위치에서 항목을 확장하면 8 번째 항목도 확장됩니다. 그 반대. 이것은 올바르게 축소되지 않은 재생 된보기입니다.

다음은 확장/축소 항목의 빠른 화면입니다.

LayoutInflater inflater = (LayoutInflater) fragment.getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    final MessageHolder holder; 
    if (convertView == null) 
    { 
     convertView = inflater.inflate(R.layout.test_message, parent, false); 
     holder = new MessageHolder(); 

     // Retrieve layout elements 
     holder.card = new WeakReference<ExpandableCardLayout>((ExpandableCardLayout) convertView.findViewById(R.id.card)); 
     holder.layout_comments = new WeakReference<LinearLayout>((LinearLayout) convertView.findViewById(R.id.layout_comments)); 
     holder.layout_loading = new WeakReference<LinearLayout>((LinearLayout) convertView.findViewById(R.id.layout_loading)); 
     holder.spinner_loading = new WeakReference<FlatLoadingSpinner>((FlatLoadingSpinner) convertView.findViewById(R.id.spinner_loading)); 

     // Attach holder 
     convertView.setTag(holder); 
    } 
    else 
    { 
     holder = (MessageHolder) convertView.getTag(); 
    } 

    // Attach listener 
    holder.card.get().setOnExpandListener(new OnExpandListener() { 
     @Override 
     public void onExpand() 
     { 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() 
       { 
        // Hide loading 
        holder.layout_loading.get().setVisibility(View.GONE); 

        // Add comments 
        List<View> comments = buildComments(null); 
        for (int i=0; i<comments.size(); i++) holder.layout_comments.get().addView(comments.get(i)); 
       } 
      }, 1000); 
     } 

     @Override 
     public void onCollapse() 
     {    
      // Remove everything 
      while (holder.layout_comments.get().getChildCount() > 0) holder.layout_comments.get().removeViewAt(0); 

      // Show loading 
      holder.layout_loading.get().setVisibility(View.VISIBLE); 
     } 
    }); 

    return convertView; 

내 질문은 : 어떻게 재활용 요소를 확장 할 수있는 붕괴보기를 방지하기 위해

여기

enter image description here

enter image description here

내가 사용하는 코드는 이러한 항목을 만들 수있다?

답변

0

onExpand()에 추가 된보기를 수동으로 제거해야합니다. ListView는 확장 논리 및 캐시에 대해 아무것도 모르고 재사용 항목보기를 '있는 그대로'표시합니다.

또는이 구성 요소는 자신의 상황에 맞게 설계되었으므로 ExpandableListView을 사용해야합니다.

추신. 왜 시간 홀더 객체에서 WeakReferences를 사용하는지 이해할 수 없습니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다. 어디에서해야합니까? 저는'WeakReference'를 사용하여'ImageView'에서'Bitmap'을 처리하고 있습니다. – Manitoba

+0

나는 그것을 독자적으로 만들었다. 당신의 도움을 주셔서 감사합니다 ! – Manitoba