0

J'ai un ListView où je voudrais gonfler un View personnalisé à une certaine position. C'est en fait le 11ème article (position 10).Gonflage personnalisé Afficher dans la listeVoir selon la position

Le retour méthode getCount() 11.

Voici la partie supérieure de la méthode getView():

public View getView(final int position, View convertView, ViewGroup parent) { 
    final ViewHolder holder; 
    if (convertView == null) {    
     if (position < 10) { 
      convertView = mInflater.inflate(R.layout.standard, null);   
     } else { 
      convertView = mInflater.inflate(R.layout.custom, null); 
      Log.i(TAG, "Inflated custom layout"); 
     } 
     Log.i(TAG, "getView, position = "+position); 
     holder = new ViewHolder(); 
     holder.tv = (TextView) convertView.findViewById(R.id.tv); 
     holder.radioButton = (RadioButton) convertView.findViewById(R.id.radioButton1);    
     convertView.setTag(holder);    
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    ... 
    Log.i(TAG, "getView() : position = " + position); 
} 

Voici ce que je vois dans le logcat:

getView, position = 0 
getView, position = 1 
getView, position = 2 

Le reste du Les journaux getView ne s'affichent PAS; Je suppose que cette ligne apparaîtrait jusqu'à getView, position = 10.

Et cette ligne: convertView = mInflater.inflate(R.layout.custom, null); n'est jamais appelée, car Inflated custom layout n'apparaît pas dans le logcat.

Il est drôle que, parce que le logcat fond est toujours appelé (comme je défiler vers le bas le ListView):

getView() : position = 0 
getView() : position = 1 
getView() : position = 2 
getView() : position = 3 
getView() : position = 4 
getView() : position = 5 
getView() : position = 6 
getView() : position = 7 
getView() : position = 8 
getView() : position = 9 
getView() : position = 10 

Pourquoi est ma mise en page personnalisée dégonflée?

Répondre

1

Vous devez gonfler la disposition lorsque les méthodes getView()View convertView ne sont pas nulles. Le View renvoyé par getView() sera réutilisé. Si vous vérifiez que la vue est nulle et qu'elle se gonfle, elle ne se gonfle que lors de la première remise du View.

public View getView(final int position, View convertView, ViewGroup parent) { 
    final ViewHolder holder; 
    if (convertView == null) {    
     if (position < 10) { 
      convertView = mInflater.inflate(R.layout.standard, null);   
     } 
     Log.i(TAG, "getView, position = "+position); 
     holder = new ViewHolder(); 
     holder.tv = (TextView) convertView.findViewById(R.id.tv); 
     holder.radioButton = (RadioButton) convertView.findViewById(R.id.radioButton1);    
     convertView.setTag(holder);    
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    ... 

    if(position > 10) { 
     convertView = mInflater.inflate(R.layout.custom, null); 
     Log.i(TAG, "Inflated custom layout"); 
    } 

    Log.i(TAG, "getView() : position = " + position); 
} 
+0

Génial, merci. – eightx2

+0

trouver ma modification comme pourquoi la vue fonctionne de cette façon. –

+0

Mais dans ce cas, chaque fois que la position passe au-dessus de 10 vue personnalisée sera gonflé à droite? Supposons que si la méthode getView appelle 100 fois avec la position 11, alors une instance de 100 de cette vue sera créée. – Triode

0

Inflate la disposition personnalisée en dehors de convertView == null. Depuis, convertView renvoie généralement une vue précédemment recyclée et, par conséquent, votre vue personnalisée ne se gonfle jamais.

Questions connexes