Android - 如何在简单的适配器列表视图中显示图片
Android - How can diplay pictures in a simpleApapter list view
我正在尝试在 SimpleAdapter 列表视图中显示图片。我在我的项目中包含了 Picasso,但我不知道如何将 Picasso 与 SimpleAdapter 一起使用。
List<HashMap<String, String>> featured = new ArrayList<HashMap<String, String>>();
for (int i=0;i<ids.length;i++){
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("productname", names[i]);
hm.put("productprice", prices[i]);
hm.put("productimage", images[i]);
featured.add(hm);
}
String[] from = {"productname", "productprice", "productimage"};
int[] to = {R.id.tv_ProductName, R.id.tv_ProductPrice, R.id.icon};
SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, featured, R.layout.listitem_featured, from, to);
HorizontalListView featuredList = (HorizontalListView) findViewById(R.id.lv_Featured);
featuredList.setAdapter(adapter);
产品名称和价格显示正确。根本不显示产品图像。图片是网址,例如:
http://thingd-media-ec1.thefancy.com/default/171510088920465761_1686d73fc160.jpeg
如何正确显示图像?
您不能 "pass Picasso" 到适配器。您必须创建自己的自定义适配器,这并不像听起来那么令人生畏。它甚至可能基于 SimpleAdapter
。像这样:
public class MyAdapter extends SimpleAdapter{
public MyAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to){
super(context, data, resource, from, to);
}
public View getView(int position, View convertView, ViewGroup parent){
// here you let SimpleAdapter built the view normally.
View v = super.getView(position, convertView, parent);
// Then we get reference for Picasso
ImageView img = (ImageView) v.getTag();
if(img == null){
img = (ImageView) v.findViewById(R.id.imageOrders);
v.setTag(img); // <<< THIS LINE !!!!
}
// get the url from the data you passed to the `Map`
String url = ((Map)getItem(position)).get(TAG_IMAGE);
// do Picasso
// maybe you could do that by using many ways to start
Picasso.with(context).load(url)
.resize(imageWidth, imageWidth).into(img);
// return the view
return v;
}
}
BTW 在自定义适配器上你可以使用它 BY:
Picasso.with(context).load(yoururl)
.resize(imageWidth, imageWidth).into(holder.imageItem);
然后 你可以只使用这个 class 而没有参数上的图像(但它必须仍然存在于 orderList 中)。
ListView list= (ListView) getActivity().findViewById(R.id.list);
ListAdapter adapter =
new MyAdapter(
getActivity(),
orderList,
R.layout.order_usa_row,
new String[]{TAG_PRICE,TAG_TITLE,TAG_PSTATUS,TAG_PRICESYMBOL},
new int[]{R.id.price,R.id.title,R.id.pstatus,R.id.symbol});
list.setAdapter(adapter);
关于图像尺寸,我认为您需要重新调整尺寸!!如上例 .resize(imageWidth, imageWidth)
希望这有帮助!!
我正在尝试在 SimpleAdapter 列表视图中显示图片。我在我的项目中包含了 Picasso,但我不知道如何将 Picasso 与 SimpleAdapter 一起使用。
List<HashMap<String, String>> featured = new ArrayList<HashMap<String, String>>();
for (int i=0;i<ids.length;i++){
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("productname", names[i]);
hm.put("productprice", prices[i]);
hm.put("productimage", images[i]);
featured.add(hm);
}
String[] from = {"productname", "productprice", "productimage"};
int[] to = {R.id.tv_ProductName, R.id.tv_ProductPrice, R.id.icon};
SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, featured, R.layout.listitem_featured, from, to);
HorizontalListView featuredList = (HorizontalListView) findViewById(R.id.lv_Featured);
featuredList.setAdapter(adapter);
产品名称和价格显示正确。根本不显示产品图像。图片是网址,例如:
http://thingd-media-ec1.thefancy.com/default/171510088920465761_1686d73fc160.jpeg
如何正确显示图像?
您不能 "pass Picasso" 到适配器。您必须创建自己的自定义适配器,这并不像听起来那么令人生畏。它甚至可能基于 SimpleAdapter
。像这样:
public class MyAdapter extends SimpleAdapter{
public MyAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to){
super(context, data, resource, from, to);
}
public View getView(int position, View convertView, ViewGroup parent){
// here you let SimpleAdapter built the view normally.
View v = super.getView(position, convertView, parent);
// Then we get reference for Picasso
ImageView img = (ImageView) v.getTag();
if(img == null){
img = (ImageView) v.findViewById(R.id.imageOrders);
v.setTag(img); // <<< THIS LINE !!!!
}
// get the url from the data you passed to the `Map`
String url = ((Map)getItem(position)).get(TAG_IMAGE);
// do Picasso
// maybe you could do that by using many ways to start
Picasso.with(context).load(url)
.resize(imageWidth, imageWidth).into(img);
// return the view
return v;
}
}
BTW 在自定义适配器上你可以使用它 BY:
Picasso.with(context).load(yoururl)
.resize(imageWidth, imageWidth).into(holder.imageItem);
然后 你可以只使用这个 class 而没有参数上的图像(但它必须仍然存在于 orderList 中)。
ListView list= (ListView) getActivity().findViewById(R.id.list);
ListAdapter adapter =
new MyAdapter(
getActivity(),
orderList,
R.layout.order_usa_row,
new String[]{TAG_PRICE,TAG_TITLE,TAG_PSTATUS,TAG_PRICESYMBOL},
new int[]{R.id.price,R.id.title,R.id.pstatus,R.id.symbol});
list.setAdapter(adapter);
关于图像尺寸,我认为您需要重新调整尺寸!!如上例 .resize(imageWidth, imageWidth)
希望这有帮助!!