使用 Glide/Picasso 图片库时如何使用 OnItemClick 侦听器
how to use OnItemClick listener when Glide/Picasso image library is used
我有一个带有图像和文本的自定义列表视图,它是使用 Glide 图像库在列表视图中正确加载的。现在我想在 imageview 上实现一个 OnItemClickListener 以在另一个 activity 中显示图像。
适配器代码:
public class DescAdapter extends BaseAdapter {
private final listdisplay ds;
private ArrayList<descusers> dusers;
private ArrayList<descusers> orig;
public DescAdapter(listdisplay ds, ArrayList<descusers> dusers) {
this.ds = ds;
this.dusers = dusers;
}
@Override
public int getCount() {
return dusers.size();
}
@Override
public Object getItem(int position) {
return dusers.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
descusers du = dusers.get(position);
String username = du.loginname;
String descCrip=du.descCrip;
String Limage = du.image;
long Ptime = du.Ptime;
Viewholder viewholder = null;
if(convertView==null) {
viewholder = new Viewholder();
convertView = LayoutInflater.from(ds).inflate(R.layout.customlist, null);
viewholder.uname = (TextView) convertView.findViewById(R.id.username);
viewholder.desc = (TextView) convertView.findViewById(R.id.description);
viewholder.time = (TextView)convertView.findViewById(R.id.time);
viewholder.iview = (ImageView) convertView.findViewById(R.id.imageList);
convertView.setTag(viewholder);
}else {
viewholder = (Viewholder) convertView.getTag();
}
viewholder.uname.setText(username);
viewholder.desc.setText(descCrip);
if (Limage.trim().isEmpty()) {
viewholder.iview.setVisibility(View.GONE);
} else {
Glide.with(convertView.getContext()).load(Limage)
.diskCacheStrategy(DiskCacheStrategy.ALL).fitCenter().centerCrop().into(viewholder.iview);
viewholder.iview.setVisibility(View.VISIBLE);
}
return convertView;
}
OnItemClick 代码:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final ImageView imageView = (ImageView) view.findViewById(R.id.imageList);
final BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawable();
final Bitmap yourBitmap = bitmapDrawable.getBitmap();
Intent intent = new Intent(this, cust.class);
intent.putExtra("BitmapImage", yourBitmap);
}
接收意图:
Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
imagedisplay = (ImageView)findViewById(R.id.imagedisplay);
imagedisplay.setImageBitmap(bitmap);
但是当我点击下面的图片时会看到异常。
java.lang.ClassCastException: com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable 无法转换为 android.graphics.drawable.BitmapDrawable
final BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawable();
将此 BitmapDrawable 转换为 GlideBitmapDrawable。
final GlideBitmapDrawable bitmapDrawable = (GlideBitmapDrawable ) imageView.getDrawable();
我希望 Picaso 将 drawable 提供为 GlideBitmapDrawable 格式。
试试这个代码
在您的适配器中传递意图 class:
Intent i = new Intent(context, S.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("image",Limage);
context.startActivity(i);
在你的 S.class
中获得意图
Intent i = getIntent();
String image = i.getStringExtra("image");
Picasso.with(this).load(image).into(img_meme);//imageview name
希望对你有用
您应该传递图像 URL 而不是传递 Bitmap
,然后在您的详细信息中加载该图像 url activity. Glide
处理 caching
的图像,以便快速加载并避免不必要的位图对象混乱。
我有一个带有图像和文本的自定义列表视图,它是使用 Glide 图像库在列表视图中正确加载的。现在我想在 imageview 上实现一个 OnItemClickListener 以在另一个 activity 中显示图像。
适配器代码:
public class DescAdapter extends BaseAdapter {
private final listdisplay ds;
private ArrayList<descusers> dusers;
private ArrayList<descusers> orig;
public DescAdapter(listdisplay ds, ArrayList<descusers> dusers) {
this.ds = ds;
this.dusers = dusers;
}
@Override
public int getCount() {
return dusers.size();
}
@Override
public Object getItem(int position) {
return dusers.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
descusers du = dusers.get(position);
String username = du.loginname;
String descCrip=du.descCrip;
String Limage = du.image;
long Ptime = du.Ptime;
Viewholder viewholder = null;
if(convertView==null) {
viewholder = new Viewholder();
convertView = LayoutInflater.from(ds).inflate(R.layout.customlist, null);
viewholder.uname = (TextView) convertView.findViewById(R.id.username);
viewholder.desc = (TextView) convertView.findViewById(R.id.description);
viewholder.time = (TextView)convertView.findViewById(R.id.time);
viewholder.iview = (ImageView) convertView.findViewById(R.id.imageList);
convertView.setTag(viewholder);
}else {
viewholder = (Viewholder) convertView.getTag();
}
viewholder.uname.setText(username);
viewholder.desc.setText(descCrip);
if (Limage.trim().isEmpty()) {
viewholder.iview.setVisibility(View.GONE);
} else {
Glide.with(convertView.getContext()).load(Limage)
.diskCacheStrategy(DiskCacheStrategy.ALL).fitCenter().centerCrop().into(viewholder.iview);
viewholder.iview.setVisibility(View.VISIBLE);
}
return convertView;
}
OnItemClick 代码:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final ImageView imageView = (ImageView) view.findViewById(R.id.imageList);
final BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawable();
final Bitmap yourBitmap = bitmapDrawable.getBitmap();
Intent intent = new Intent(this, cust.class);
intent.putExtra("BitmapImage", yourBitmap);
}
接收意图:
Intent intent = getIntent();
Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");
imagedisplay = (ImageView)findViewById(R.id.imagedisplay);
imagedisplay.setImageBitmap(bitmap);
但是当我点击下面的图片时会看到异常。
java.lang.ClassCastException: com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable 无法转换为 android.graphics.drawable.BitmapDrawable
final BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawable();
将此 BitmapDrawable 转换为 GlideBitmapDrawable。
final GlideBitmapDrawable bitmapDrawable = (GlideBitmapDrawable ) imageView.getDrawable();
我希望 Picaso 将 drawable 提供为 GlideBitmapDrawable 格式。
试试这个代码 在您的适配器中传递意图 class:
Intent i = new Intent(context, S.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra("image",Limage);
context.startActivity(i);
在你的 S.class
中获得意图Intent i = getIntent();
String image = i.getStringExtra("image");
Picasso.with(this).load(image).into(img_meme);//imageview name
希望对你有用
您应该传递图像 URL 而不是传递 Bitmap
,然后在您的详细信息中加载该图像 url activity. Glide
处理 caching
的图像,以便快速加载并避免不必要的位图对象混乱。