Невозможно setTag и getTag для Viewholder в ExpandableListView

Я работаю над расширяемым списком, который имеет разные макеты в разных дочерних элементах. Я также использую метод 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;
    }


}

person RedGiant    schedule 01.03.2016    source источник
comment
Дело в том, что вы не используете уникальный ключ для хранения тега, поэтому вы видите сбой, вы должны использовать уникальные ключи для каждого нового тега, и в вашем случае я могу предположить, что childType не уникален для каждый предмет   -  person Bhargav    schedule 01.03.2016
comment
@Bhargav, спасибо, я также пытался использовать childId, int childId = (int) getChildId(groupPosition, childPosition); все еще не работает   -  person RedGiant    schedule 01.03.2016
comment
зачем нужно устанавливать ключ? вы храните несколько тегов в одном представлении?   -  person Bhargav    schedule 01.03.2016