2010-02-26 14 views
1

Lorsque je remplis un ArrayAdapter, les lignes de la partie visible de l'écran seront d'abord vides à l'exception de la première ligne, ce qui sera un résultat indésirable. Ensuite, quand je le fais défiler et que je reviens tout l'écran sera réglé correctement ... s'il vous plaît quelqu'un me dire pourquoi ce comportement se produit?Android: Pourquoi ArrayAdapter Affiche null au premier abord?

code:

 homeListView = (ListView) findViewById(R.id.home_list); 
     homeArrayAdapter = new HomeListArrayAdapter(this, R.id.home_list, 
       homeList); 
     homeListView.setAdapter(homeArrayAdapter); 

Suivant Partie en tant que classe extension ArrayAdapter, une classe interne à l'activité:

public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     if (view == null) { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(R.layout.home, null); 
     } 

     Home item = (homeList).get(position); 
     if (item != null) { 
      if (item.type_text == Home.SIMPLE_SHOUT) { 
       TextView tv1 = (TextView) findViewById(R.id.hTextView01); 
       if (tv1 != null) { 
        tv1 
          .setText(String.format(" %s\t:", 
            item.friend_name)); 
        final String item_friend_id_01 = String 
          .valueOf(item.users_id); 
        tv1.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
          Toast toast = Toast.makeText(Tranz.this, 
            item_friend_id_01, Toast.LENGTH_LONG); 
          toast.show(); 
         } 
        }); 
       } 
       TextView tv2 = (TextView) findViewById(R.id.hTextView02); 
       if (tv2 != null) { 
        tv2.setText(String.format("\t%s", item.message)); 
        tv2.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
         } 
        }); 

       } 
       TextView tv3 = (TextView) findViewById(R.id.hTextView03); 
       if (tv3 != null) { 
        tv3.setVisibility(0); 
        tv3.setText(null); 
        tv3.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
         } 
        }); 

       } 
       ImageView imageView = (ImageView) findViewById(R.id.file_image); 
       if (imageView != null) { 
        imageView.setBackgroundDrawable(null); 
       } 
      } else if (item.type_text == Home.FILE_SHOUT) { 
       TextView tv1 = (TextView) findViewById(R.id.hTextView01); 

Le code est tronqué se, donc tout le code n'apparaît pas ici. Je suis désolé à ce sujet. Voici ce que j'ai essayé de mettre les valeurs dans l'objet de la classe Home en deux textViews et un ImageView, qui peuvent varier selon la valeur retournée par la variable item.type_text

Aussi si quelqu'un peut me dire une autre meilleure pratique à faire ceci, aidez svp.

Répondre

2

Je ne suis pas sûr si c'est le problème, mais peut-être cela aidera.

Je vois que vous passez null à LayoutInflater.inflate comme second paramètre. Peut-être que si vous passez parent (qui est le ViewGroup passé en tant que troisième argument à getView(), probablement votre ListView) vous obtiendrez de meilleurs résultats.

+0

Merci synic, mais ne fonctionnait pas ... il y avait une erreur dans mon Gonflez les lignes de code ... mais résolvez-le en changeant les codes d'inflation aux codes donnés ci-dessous ... LayoutInflater inflater = context.getLayoutInflater(); Voir vue = inflater.inflate (R.layout.home_list, null); Je ne sais pas ce qui est arrivé, mais cela a fonctionné. Merci encore pour votre aide. –

1

J'ai eu un problème similaire à celui que je résolus en utilisant view.findViewById (R.id.hTextVew01) au lieu de simplement findViewById(R.id.hTextView01)

Questions connexes