我有一个ListView,我正在为手机上的每个联系人填充名称和图像(如果存在)。这可以在应用程序最初加载时正常工作,但是一旦我开始滚动ListView,原始正确的图像就会消失。我唯一能想到的就是资源在屏幕滚动后会被使用然后被销毁,但是我没有找到如何保留它们的运气。
我循环遍历所有联系人并存储名称并使用ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(),photoUri);检索联系人图像的InputStream。然后,在我的自定义ArrayAdapter中,我使用Drawable.createFromStream()来为我的ListView项目的ImageView设置图像。
谢谢!
编辑: 根据要求,这是我的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 :(得分:0)
从InputStream读取后,如果没有从提供程序请求新的InputStream,则无法重新读取它。