2017-12-27 7 views
1

시작 시점에 자식 요소의 가시성이 사라지는 헤더 요소와 자식 요소가있는 리사이클 러 뷰가 있습니다. 나는 그 머리 요소를 클릭했을 때 위치 0의 자식 요소가 표시되어야한다고 (확장을 의미한다) 이것을 성공적으로 달성하기를 원한다. 내가 직면하고있는 유일한 문제는 동일한 위치를 다시 클릭했을 때 동일한보기를 축소하려는 것입니다. 논리 onBingViewHolderExpand recycler보기의 레이아웃 축소

내 재활용보기는 아래와 같습니다 : - 고급의

holder.doc_type.setText(docDatalist.get(position).getDocTypeDesc()); 

    if (position == expandedPosition) 
    { 
      holder.recyclerViewImages.setVisibility(View.VISIBLE); 
      imagerequestserver(docDatalist.get(expandedPosition), vinappserial, holder); 
      holder.iconexpandCollapse.setImageResource(R.mipmap.expand_4); 
     } 


    else { 
     holder.recyclerViewImages.setVisibility(View.GONE); 
     holder.iconexpandCollapse.setImageResource(R.mipmap.expand); 

    } 
    holder.myDocumentListCollapse.setOnClickListener(new View.OnClickListener() { 


     @Override 
     public void onClick(View view) { 



      if (expandedPosition >= 0) { 

        int prev = expandedPosition; 
        holder.recyclerViewImages.setVisibility(View.VISIBLE); 
       notifyItemChanged(prev); 

      }else { 
       expandedPosition = holder.getAdapterPosition(); 
       notifyItemChanged(expandedPosition); 
      } 
     } 

    }); 

감사합니다.

+1

제안에 통지 관리 :

클릭 리스너 클릭 이벤트를 생성자에

positionSet = new ArrayList<>(); 

추가 붕괴 위치 목록을 제공하고 헤더에 적절한 위치를 제거 ['SparseBooleanArray'] (https://developer.android.com/reference/an)를 사용하여이를 구현하십시오. droid/util/SparseBooleanArray.html). 논리가 확장 될 때마다 항목의 위치를 ​​가져 와서 SparseBooleanArray 내부에서 부울 ** true **를 만들고 접힌 상태에서 ** false **로 만드는 것입니다. –

+0

어디에서나'shouldExpand'가 사용되는 것을 볼 수 없습니다 ... – Belladonna

+0

@Belladonna 죄송합니다. 제거하는 것을 잊어 버립니다. – Champandorid

답변

0

클릭 한 위치 배열을 수동으로 추가 한 다음 viewHolder에서 위치를 확인한 후 추가해야합니다.

public void onClick(View view) { 


       int position = getAdapterPosition(); 
       if(positionSet.contains(position)){ 

        positionSet.remove((Integer)position); 
       }else { 
        positionSet.add(position); 
       } 
       notifyDataSetChanged(); 
      } 
     } 

것은 내가 onBindViewHolder

if(positionSet.contains(position)){ 
     //visible 
    }else { 
     //gone 
    } 
+0

내 생각을 이해하지 못한다고 생각합니다. – Champandorid

+0

어디에서 확장 위치가됩니까? –