Android ListПросмотреть исчезающие изображения - PullRequest
0 голосов
/ 04 ноября 2010

У меня есть ListView, который я заполняю именами и изображениями (если они есть) для каждого контакта в моем телефоне. Это прекрасно работает, когда приложение изначально загружается, но как только я начинаю прокручивать ListView, изображения, которые были изначально правильными, исчезают. Единственное, о чем я могу думать, это то, что ресурсы используются, а затем уничтожаются, когда они прокручиваются за пределы экрана, но мне не повезло узнать, как их держать.

Я перебираю все мои контакты и сохраняю имя, используя ContactsContract.Contacts.openContactPhotoInputStream (context.getContentResolver (), photoUri); чтобы получить InputStream изображения контакта. Затем в моем собственном ArrayAdapter я использую Drawable.createFromStream (), чтобы установить изображение для ImageView моего элемента ListView.

Спасибо!

Edit: Как и просили, вот мой метод 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;
}

1 Ответ

0 голосов
/ 05 ноября 2010

Как только вы прочитали InputStream, вы достигли его конца и не можете перечитать его, не запросив новый InputStream у провайдера.

...