2016-05-06 39 views
0

我有一个带图像和文本的自定义列表视图,它使用Glide图像库在列表视图中正确加载。现在我想在imageview上实现一个OnItemClickListener以在另一个活动中显示图像。如何在使用Glide/Picasso图像库时使用OnItemClick监听器

适配器代码:

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); 

} 

Receiveing意图:

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

回答

0
final BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawable(); 

更改此BitmapDrawable铸造GlideBitmapDrawable。

final GlideBitmapDrawable bitmapDrawable = (GlideBitmapDrawable) imageView.getDrawable(); 

我希望Picaso给出作为GlideBitmapDrawable格式的drawable。

+0

我根据您的建议进行了更改,但点击后不会移至其他活动。 – user2269164

+0

您需要以您创建的目的开始活动。 – Srinivasan

0

试试这个代码 传球意图在适配器类:

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 

希望它会工作的ü

0

不是传递Bitmap您应该传递图片网址,然后在您的详细信息活动中加载该图片网址。 Glide处理caching的图像,所以它会加载很快,它会避免不必要的位图对象混乱。

相关问题