ListViews с несколькими макетами элементов

У меня есть ListView в моей ListActivity и я бы хотел, чтобы строки ListView были 1 из 3 разных макетов. Первый элемент в моем списке всегда будет использовать макет A, второй элемент в моем списке всегда будет использовать макет B, и все последующие элементы будут использовать макет C.

Вот моя функция 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.layout.layout_A ) и R.layout.layout_A нижеприведенный пример, чтобы установить текст R.id.label1 и R.id.label2 .

Кроме того, если есть лучший способ сделать это, пожалуйста, дайте мне знать.

Solutions Collecting From Web of "ListViews с несколькими макетами элементов"