Android 使用listview中的glide库未在对话框中加载正确的图像
有一个显示图像和文本的列表视图。图像和文本正确显示在listview中。但是当点击图像时,它应该以全屏模式显示在对话框中。图像显示在对话框中,但显示的图像错误。每当在listview中单击图像时,它总是显示错误的图像(列表底部的图像)。下面我提供了我使用的适配器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
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 {
...
}