2010-11-04 16 views
0

J'ai un ListView que je remplis avec des noms et des images (le cas échéant) pour chaque contact sur mon téléphone. Cela fonctionne correctement lorsque l'application se charge initialement, mais une fois que je commence à faire défiler la liste, les images qui étaient correctes à l'origine disparaissent. La seule chose à laquelle je peux penser est que les ressources sont utilisées et ensuite détruites une fois qu'elles défilent à l'écran, mais je n'ai pas de chance de savoir comment les garder.Android ListView Vanishing Images

Je parcourt tous mes contacts et stocke le nom et utilise ContactsContract.Contacts.openContactPhotoInputStream (context.getContentResolver(), photoUri); pour extraire un InputStream de l'image du contact. Ensuite, dans mon ArrayAdapter personnalisé, j'utilise Drawable.createFromStream() pour définir l'image pour l'ImageView de mon élément ListView.

Merci!

Edit: Comme demandé, voici ma méthode getView

public View getView(int position, View convertView, ViewGroup parent) 
{ 
    LinearLayout contact_view; 
    //Get the current alert object 
    ContactInfo contact = getItem(position); 

    //Inflate the view 
    if(convertView==null) 
    { 
     contact_view = new LinearLayout(getContext()); 
     String inflater = Context.LAYOUT_INFLATER_SERVICE; 
     LayoutInflater vi; 
     vi = (LayoutInflater)getContext().getSystemService(inflater); 
     vi.inflate(resource, contact_view, true); 
    } 
    else 
    { 
     contact_view = (LinearLayout) convertView; 
    } 

    //Get the fields to populate from the listitem.xml file 
    TextView contact_name = (TextView)contact_view.findViewById(R.id.contact_name); 
    ImageView contact_image =(ImageView)contact_view.findViewById(R.id.contact_image); 

    //Assign the appropriate data from our alert object above 
    contact_name.setText(contact.get_name()); 
    if(contact.get_contact_image() != null) { 
     contact_image.setImageDrawable(Drawable.createFromStream(contact.get_contact_image(), "src")); 
    } else { 
     contact_image.setImageResource(R.drawable.dummy_image); 
    } 

    return contact_view; 
} 
+0

Pourriez-vous inclure dans votre message le code de votre méthode d'adaptateur getView()? –

Répondre

0

Une fois que vous avez lu à partir d'un InputStream, vous atteignez la fin et ne peut pas relire sans demander une nouvelle InputStream du fournisseur.

+0

Merci, je l'ai compris cet après-midi! J'ai lu le InputStream dans un bitmap et cela a bien fonctionné. – Jay