Android 使用listview中的glide库未在对话框中加载正确的图像

Android 使用listview中的glide库未在对话框中加载正确的图像,android,listview,baseadapter,android-glide,Android,Listview,Baseadapter,Android Glide,有一个显示图像和文本的列表视图。图像和文本正确显示在listview中。但是当点击图像时,它应该以全屏模式显示在对话框中。图像显示在对话框中,但显示的图像错误。每当在listview中单击图像时,它总是显示错误的图像(列表底部的图像)。下面我提供了我使用的适配器 public class DescAdapter extends BaseAdapter implements Filterable { private final listdisplay ds; private

有一个显示图像和文本的列表视图。图像和文本正确显示在listview中。但是当点击图像时,它应该以全屏模式显示在对话框中。图像显示在对话框中,但显示的图像错误。每当在listview中单击图像时,它总是显示错误的图像(列表底部的图像)。下面我提供了我使用的适配器

  public class DescAdapter extends BaseAdapter implements Filterable {

    private final listdisplay ds;
    private ArrayList<descusers> dusers;
    private ArrayList<descusers> orig;
    private Activity listdisplay;
    PhotoViewAttacher p;
    String Limage,profile;



    public DescAdapter(listdisplay ds, ArrayList<descusers> dusers,Activity listdisplay) {
        this.ds = ds;
        this.dusers = dusers;
        this.listdisplay = listdisplay;

    }

    @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;
        Limage = du.image;
        long Ptime = du.Ptime;
        profile = du.profile;
        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);
            viewholder.civ = (CircleImageView)convertView.findViewById(R.id.profile_image);
            viewholder.progress = (ProgressBar)convertView.findViewById(R.id.progress);

            Glide.with(convertView.getContext()).load(profile).centerCrop().diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true)
                    .into(viewholder.civ);
          convertView.setTag(viewholder);
        }else {

            viewholder = (Viewholder) convertView.getTag();

        }

        viewholder.uname.setText(username);
        viewholder.desc.setText(descCrip);

        if (!Patterns.WEB_URL.matcher(Limage).matches()) {
            viewholder.progress.setVisibility(View.GONE);
            viewholder.iview.setVisibility(View.GONE);
        } else {
            final Viewholder finalViewholder1 = viewholder;
            Glide.with(convertView.getContext()).load(Limage).centerCrop()
                    .diskCacheStrategy(DiskCacheStrategy.ALL).listener(new RequestListener<String, GlideDrawable>() {
                           @Override
                           public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                               return false;
                           }

                           @Override
                           public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                           finalViewholder1.progress.setVisibility(View.GONE);
                               return false;
                           }
                       }).into(viewholder.iview);
            viewholder.iview.setVisibility(View.VISIBLE);
        }



        final View finalConvertView = convertView;

        viewholder.iview.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                Dialog builder = new Dialog(listdisplay, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
                builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
                builder.getWindow().setBackgroundDrawable(
                        new ColorDrawable(Color.BLACK));
                 builder.setContentView(R.layout.imager);

                builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface dialogInterface) {
                        //nothing;
                    }
                });


              ImageView image = (ImageView) builder.findViewById(R.id.image);
                Glide.with(finalConvertView.getContext()).load(Limage)
                         .diskCacheStrategy(DiskCacheStrategy.ALL).into(image);

              builder.show();
            }
        });


        return convertView;
    }
公共类DescAdapter扩展BaseAdapter实现可过滤{
私人最终名单;
私人ArrayList dusers;
私人ArrayList orig;
私人活动列表显示;
照相取景器;
线状轮廓;
公共描述适配器(listdisplay ds、ArrayList Duser、Activity listdisplay){
这是1.ds=ds;
这个.dusers=dusers;
this.listdisplay=listdisplay;
}
@凌驾
public int getCount(){
返回dusers.size();
}
@凌驾
公共对象getItem(int位置){
返回dusers.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
descusers du=dusers.get(位置);
字符串username=du.loginname;
字符串descCrip=du.descCrip;
Limage=du.image;
长Ptime=du.Ptime;
profile=du.profile;
Viewholder Viewholder=null;
if(convertView==null){
viewholder=新的viewholder();
convertView=LayoutFlater.from(ds).充气(R.layout.customlist,空);
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);
viewholder.civ=(CircleImageView)convertView.findViewById(R.id.profile_image);
viewholder.progress=(ProgressBar)convertView.findViewById(R.id.progress);
Glide.with(convertView.getContext()).load(profile).centerCrop().diskCacheStrategy(diskCacheStrategy.NONE).skipMemoryCache(true)
.into(viewholder.civ);
convertView.setTag(viewholder);
}否则{
viewholder=(viewholder)convertView.getTag();
}
viewholder.uname.setText(用户名);
viewholder.desc.setText(descCrip);
如果(!Patterns.WEB_URL.matcher(Limage.matches()){
viewholder.progress.setVisibility(View.GONE);
viewholder.iview.setVisibility(View.GONE);
}否则{
最终视图持有者FinalViewHolder 1=视图持有者;
Glide.with(convertView.getContext()).load(Limage.centerCrop())
.diskCacheStrategy(diskCacheStrategy.ALL).listener(新的RequestListener(){
@凌驾
公共布尔onException(异常e、字符串模型、目标、布尔isFirstResource){
返回false;
}
@凌驾
公共布尔值onResourceReady(GlideDrawable资源、字符串模型、目标、布尔值isFromMemoryCache、布尔值isFirstResource){
finalViewholder1.progress.setVisibility(View.GONE);
返回false;
}
}).into(viewholder.iview);
viewholder.iview.setVisibility(View.VISIBLE);
}
最终视图finalConvertView=convertView;
viewholder.iview.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
对话框生成器=新对话框(列表显示,android.R.style.Theme\u黑色\u NoTitleBar\u全屏);
builder.requestWindowFeature(窗口.功能\u无\u标题);
builder.getWindow().setBackgroundDrawable(
新的可着色(颜色为黑色);
builder.setContentView(R.layout.imager);
builder.setOnDismissListener(新的DialogInterface.OnDismissListener(){
@凌驾
公共void onDismiss(DialogInterface DialogInterface){
//什么都没有;
}
});
ImageView image=(ImageView)builder.findViewById(R.id.image);
Glide.with(finalConvertView.getContext()).load(Limage)
.diskCacheStrategy(diskCacheStrategy.ALL).into(映像);
builder.show();
}
});
返回视图;
}
例如:

如果listview显示3个图像: 文本1

图1 文本2

图2 文本3

图3
如果单击image3,它将正确显示在对话框中。如果单击image2,则显示的是image3而不是image2。然后单击image1,则对话框中显示image2。请提供帮助。

在bindView调用中,您必须清除()如果不向以前可能已启动加载的任何视图或目标启动新加载,则这些视图或目标可能已启动加载。在上述两种情况下,您没有这样做。第一种情况如下:

if (convertView == null) {
    ...
} else {
    // Clear or reload viewholder.civ
}
第二点是:

if (!Patterns.WEB_URL.matcher(Limage).matches()) {
    // Clear or reload viewholder.iview
} else {
    ...
}