ListViews avec plusieurs mises en page d'éléments

J'ai un ListView sur mon ListActivity et j'aimerais les lignes de la ListView de 1 à 3 différentes mises en page. Le premier élément de ma liste va toujours utiliser la mise en page Une, le deuxième point de ma liste va toujours utiliser la mise en page B, et tous les autres éléments vont utiliser la mise en page C.

Voici mon getView fonction:

@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 et R.id.label2 sont TextViews sur R.layout.layout_A. Cependant, txtLabel1 et txtLabel2 sont nulles après avoir essayé de les définir. Pourquoi?

Je passais à travers ce code dans le débogueur et gonflés à la bonne mise en page (R.layout.layout_A) et est tombé dans les cas ci-dessous pour définir le R.id.label1 et R.id.label2 texte.

Aussi, si il ya une meilleure façon de le faire, s'il vous plaît laissez-moi savoir.

source d'informationauteur Andrew | 2010-08-05