Я работаю над расширяемым списком, который имеет разные макеты в разных дочерних элементах. Я также использую метод viewHolder
для кэширования представлений. Приложение вылетает с этой ошибкой:
java.lang.IllegalArgumentException: The key must be an application-specific resource id.
Я знаю, что в качестве ключа нужно что-то вроде идентификатора макета, но единственный способ вызвать правильный viewHolder
— это childType
в этом случае:
int childType = getChildType(groupPosition, childPosition);
if (convertView == null || convertView.getTag(childType) != null) {
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.list_item, null);
viewHolder.text = (TextView)convertView.findViewById(R.id.text);
convertView.setTag(childType,viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag(childType);
}
if(childType == 0){
/***Render Stuff***/
}
Как я могу использовать childType
для вызова viewHolder для различных типов дочерних элементов?
Полный код:
public class ExpandableListAdapter extends BaseExpandableListAdapter{
private Context context;
private Map<String, List<?>> dataCollections;
public ExpandableListAdapter(FragmentActivity context, List<String> laptops,
Map<String, List<?>> dataCollections) {
this.context = context;
this.dataCollections = dataCollections;
}
public View getChildView(final int groupPosition, final int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
MappingItem row = (MappingItem) getChild(groupPosition, childPosition);
int childType = getChildType(groupPosition, childPosition);
ViewHolder viewHolder;
if (convertView == null || convertView.getTag(childType) != null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
viewHolder = new ViewHolder();
if(childType == 0){
convertView = inflater.inflate(R.layout.list_item, null);
viewHolder.text = (TextView)convertView.findViewById(R.id.text);
}
convertView.setTag(childType,viewHolder);
^^^^^^
}else {
viewHolder = (ViewHolder) convertView.getTag(childType);
}
if(childType == 0){
/********Render Something**********/
}
return convertView;
}
}
int childId = (int) getChildId(groupPosition, childPosition);
все еще не работает - person RedGiant   schedule 01.03.2016