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