У меня есть ListView
на моем ListActivity
, и я хотел бы, чтобы строки ListView
были 1 из 3 разных макетов. Первый элемент в моем списке всегда будет использовать макет A, второй элемент в моем списке всегда будет использовать макет B, а все последующие элементы будут использовать макет C.ListViews с несколькими макетами позиций
Вот моя функция getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// get the View for this list item
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch (position) {
case 0:
v = vi.inflate(R.layout.layout_A, parent, false);
break;
case 1:
v = vi.inflate(R.layout.layout_B, parent, false);
break;
default:
v = vi.inflate(R.layout.layout_C, parent, false);
break;
}
}
switch (position) {
case 0:
TextView txtLabel1 = (TextView)findViewById(R.id.label1);
TextView txtLabel2 = (TextView)findViewById(R.id.label2);
if (txtLabel1 != null) {
txtLabel1.setText("sdfasd");
}
if (txtLabel2 != null) {
txtLabel2.setText("dasgfadsasd");
}
break;
default:
break;
}
// return the created view
return v;
}
R.id.label1
и R.id.label2
являются TextViews
на R.layout.layout_A
. Тем не менее, txtLabel1
и txtLabel2
имеют значение null после попытки их установки. Зачем?
Я прошел через этот код в отладчике и завысил правильный макет (R.layout.layout_A
) и упал в правильный регистр ниже, чтобы установить R.id.label1
и R.id.label2
текст.
Кроме того, если есть лучший способ сделать это, пожалуйста, дайте мне знать.
Проверьте [этот учебник] (http://android.amberfog.com/?p=296). Они объясняют нечто подобное тому, чего вы пытаетесь достичь. – Macarse