Пользовательский адаптер для создания списка с различными элементами

То, что я хочу, это иметь представление списка с различными типами элементов в каждой строке списка. Я знаю, что мне нужно использовать специальный адаптер, который расширяет BaseAdapter, а не ArrayAdapter, но после этого я не знаю, как решить эту проблему. Ранее я пытался сделать адаптер, как это:

public class MyArrayAdapter<T> extends ArrayAdapter<T> {
    LayoutInflater mInflater;
    int[] mLayoutResourceIds;
    private final Context context;

    public MyArrayAdapter(Context context, int[] textViewResourceId, List<T> objects) {
        super(context, textViewResourceId[0], objects);
        this.context = context;
        mInflater = (LayoutInflater)context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
        mLayoutResourceIds = textViewResourceId;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;

        int type = getItemViewType(position);
        // instead of if else you can use a case
        if (row  == null) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (type == TYPE_ITEM1) {
                //infalte layout of type1
                row = inflater.inflate(R.layout.item1, parent, false);
            }
            if (type == TYPE_ITEM2) {
                //infalte layout of type2
            }  else {
                //infalte layout of normaltype
            }
        }
        return super.getView(position, convertView, parent);
    }

    @Override
    public int getItemViewType(int position) {
        if (position== 0){
            type = TYPE_ITEM1;
        } else if  (position == 1){
            type = TYPE_ITEM2;
        }
        else
        {
            type= TYPE_ITEM3 ;
        }
        return type;    //To change body of overridden methods use File | Settings | File Templates.
    }

    @Override
    public int getViewTypeCount() {
        return 3;    //To change body of overridden methods use File | Settings | File Templates.
    }
}

но когда я запустил активность, я получил ошибку:

java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView

и я понимаю, почему, но я не собираюсь использовать textView во всех моих макетах. Мне нужно некоторое руководство относительно того, как действовать. Спасибо

Изменение фона родителя linearLayout в моем item1.xml вызывает исключение нулевого указателя. Это работает без исключения нулевого указателя, если я оставляю фон, как это было изначально, хотя

Ответы на вопрос(7)

Ваш ответ на вопрос