그래서이 간단한 문제를 해결하지 못했습니다.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을 확장입니까?
위치는 아마도 RecyclerViews, ListViews 등을위한 가장 큰 선물입니다.보기가 재활용됨에 따라 제공된 위치는 항상 동일합니다. 그래서 예. SparseArray를 사용하여 원하는 위치의 라디오를들 수 있습니다. 그럼 당신은 그것을 검색하고 null이 아닌 경우 사용하고 더 이상 사용되지 않는 경우 보유 된 위치를 제거합니다. 어떤 일이 일어나고 있는지 파악할 수있는 방법은 많습니다. 목록이 변경되면 모든 소유자를 업데이트하십시오. – CmosBattery
나는 고맙습니다. SparseArryay, 고마워요. 또한, RecyclerView가 문제가되기 전에 사람들이이 문제를 어떻게 관리 했습니까? 2012 년 이전에 시도했던 것과 똑같은 것을 구현하려고 시도한 사람들이 있었나요? – rated2016