【发布时间】:2016-11-15 16:35:53
【问题描述】:
在 ListView 适配器中:
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
final DataEntity data = dataList.get(position);
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.item_list_asset_receivable, null);
holder.amountTV = (TextView) convertView.findViewById(R.id.tv_asset_liability_fill_accounts_receivable_amount);
holder.gridView = (CustomGridView) convertView.findViewById(R.id.cgv_images);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.amountTV.setText(String.valueOf(data.getAmount()));
final String id = data.getPicGroupId();
OkHttpUtilsHelper.getImagesByGroupId(data.getPicGroupId(), TAG)
.execute(new ImageGroup.MyCallback() {
@Override
public void onResult(List<String> images) {
CustomGridViewAdapter adapter = new CustomGridViewAdapter(context, images);
holder.gridView.setAdapter(adapter);
}
});
return convertView;
}
}
在 GridView 适配器中,我使用 glide 将互联网图像加载到 ImageView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.item_gridview_pics, null);
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_pic);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
String imgPath = (String) dataList.get(position);
if (imgPath.startsWith("http")) {
Glide.with(context)
.load(imgPath)
.centerCrop()
.placeholder(R.mipmap.ic_launcher)
.crossFade()
.into(viewHolder.imageView);
} else {
viewHolder.imageView.setImageBitmap(BitmapFactory.decodeFile(imgPath));
}
return convertView;
}
我已经解决了 ListView 与 GridView 的问题,例如:Add a GridView to a ListView in Android
虽然根据日志,似乎gridview适配器的getView()会向后触发listview适配器的getView(),然后再次调用gridview适配器的getview,一个deed循环!
欢迎提出任何建议!
【问题讨论】:
-
参考this
-
谢谢,但是我已经用过glide了,这不是如何异步加载图片的问题,我们应该关注如何在listview中正确使用gridview。