2017-11-11 3 views
0

그래서이 간단한 문제를 해결하지 못했습니다.Recyclerview에서 확장 가능한 ListView를 사용하는 방법?

목표 : 부모가 textView이고 하위가 2 개의 라디오 (현재)가 포함 된 라디오 그룹 인 확장 가능한 목록을 만들고 싶습니다.

나는 모든 것이 작동했지만 확장 가능한 ListView가 recyclerview 또는 viewholder 중 하나를 사용하도록 제안하는 객체를 재사용한다는 것을 알게되었습니다. viewholder를 시도했지만 동일한 일이 발생했습니다. 그룹 1을 확장하고 라디오 위치 1을 확인한 경우 그룹 1의 확장을 해제하고 그룹 2를 확장하면 라디오 위치 1이 확인됩니다. 왜 이런 일이 일어나는 걸까요?

public int getGroupCount() { 
    return titles.size(); 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return 1; 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return titles.get(groupPosition); 
} 

@Override 
public List<String> getChild(int groupPosition, int childPosition) { 
    return colorsMap.get(titles.get(groupPosition)); 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

@Override 
public boolean hasStableIds() { 
    return false; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
    String title = (String) this.getGroup(groupPosition); 
    if(convertView == null){ 
     LayoutInflater layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     assert (layoutInflater != null); 
     convertView = layoutInflater.inflate(R.layout.parent_item_s, parent, false); 
    } 
    TextView textView = (TextView) convertView.findViewById(R.id.titleContent); 
    textView.setTypeface(null, Typeface.BOLD); 
    textView.setText(title); 
    return convertView; 
} 
class ViewHolder{ 
    RadioButton radioButton; 
    RadioButton radioButton1; 

    ViewHolder(View view){ 
      radioButton = (RadioButton) view.findViewById(R.id.rd1); 
      radioButton1 = (RadioButton) view.findViewById(R.id.rd2); 
    } 


} 

@Override 
public View getChildView(final int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 

    List<String> color = colorsMap.get(titles.get(groupPosition)); 
    ViewHolder holder = null; 
    if(convertView == null) { 
     LayoutInflater layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     assert (layoutInflater != null); 
     convertView = layoutInflater.inflate(R.layout.child_item_s, parent, false); 
     holder = new ViewHolder(convertView); 
     convertView.setTag(holder); 
    } 

    holder = (ViewHolder) convertView.getTag(); 
    holder.radioButton.setText(color.get(0)); 
    holder.radioButton1.setText(color.get(1)); 

    return convertView; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    return true; 
} 

어떻게 자신의 목적은 각 자식 보장 않습니다

여기 myClassList의 코드가 BaseExapandableListAdapter을 확장입니까?

+0

위치는 아마도 RecyclerViews, ListViews 등을위한 가장 큰 선물입니다.보기가 재활용됨에 따라 제공된 위치는 항상 동일합니다. 그래서 예. SparseArray를 사용하여 원하는 위치의 라디오를들 수 있습니다. 그럼 당신은 그것을 검색하고 null이 아닌 경우 사용하고 더 이상 사용되지 않는 경우 보유 된 위치를 제거합니다. 어떤 일이 일어나고 있는지 파악할 수있는 방법은 많습니다. 목록이 변경되면 모든 소유자를 업데이트하십시오. – CmosBattery

+0

나는 고맙습니다. SparseArryay, 고마워요. 또한, RecyclerView가 문제가되기 전에 사람들이이 문제를 어떻게 관리 했습니까? 2012 년 이전에 시도했던 것과 똑같은 것을 구현하려고 시도한 사람들이 있었나요? – rated2016

답변

0

이미 문제가 발생하여 해결 방법을 찾은 사람들이 있습니다.

afollestad's sectioned-recyclerviewdavideas's FlexibleAdapter을 살펴보십시오. 그들은 둘 다 그들의 라이브러리를 사용하는 방법에 대한 지침을 가지고있다.

+0

lib (처음에는)을 사용하지 않으려합니다. 첫 번째 링크에서 제공하는 예제를 살펴보면서 코드를 제공하므로 제공 해줘서 고맙습니다. – rated2016

+0

나는 너와 같았으나 다른 사람들은 이미 너가있는 곳에 있었고 그들이 공유하는 해결책을 만들었다. 당신은 항상 그것을 편집하고 당신의 요구에 맞게 조정할 수 있습니다. 바퀴를 재발 명할 필요가 없습니다 :) –

관련 문제