使用ViewHolder的Android列表视图

使用ViewHolder的Android列表视图,第1张

概述我有个问题.点击后我试图在列表视图中更改图标.它可以正常工作,虽然不会仅修改单击的图标,但也不会修改那些未显示的图标.例如,如果我单击列表视图的第一项中的图标,则第五个图标也会更改.对于以下所有项目(列表视图的每五个项目)重复此行为. 这是我的getView方法: public class AlphabeticalAdapter extends ArrayAdapter<String> { 我有个问题.点击后我试图在列表视图中更改图标.它可以正常工作,虽然不会仅修改单击的图标,但也不会修改那些未显示的图标.例如,如果我单击列表视图的第一项中的图标,则第五个图标也会更改.对于以下所有项目(列表视图的每五个项目)重复此行为.
这是我的getVIEw方法:
public class AlphabeticalAdapter extends ArrayAdapter<String>   {       int layoutResourceID;        private final Context context;       private List<String> data;       private ProgressDialog mProgressDialog;       private ImageVIEw downloadImagebutton;       public AlphabeticalAdapter(Context context,int resource,List<String> data){           super(context,resource,data);           this.layoutResourceID = resource;           this.context = context;           this.data = data;           }       public VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) {          // VIEw rowVIEw = convertVIEw;           final VIEwHolder vIEwHolder;           if (convertVIEw == null) {               LayoutInflater inflater = (LayoutInflater) context                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);               convertVIEw  = inflater.inflate(R.layout.catalogsList_single_row,parent,false);           vIEwHolder = new VIEwHolder();           vIEwHolder.catlogTitle=(TextVIEw)convertVIEw.findVIEwByID(R.ID.txtTitle);           vIEwHolder.icon=(ImageVIEw)convertVIEw.findVIEwByID(R.ID.imageVIEw2);            vIEwHolder.downloadImagebutton=(ImageVIEw)convertVIEw.findVIEwByID(R.ID.downloadImagebutton);           //downloadImagebutton = (ImageVIEw)rowVIEw.findVIEwByID(R.ID.downloadImagebutton);           vIEwHolder.position = position;           vIEwHolder.downloadImagebutton.setonClickListener(new OnClickListener() {               @OverrIDe                 public voID onClick(VIEw v) {                     System.out.println("DOWNLOAD pressed");                     vIEwHolder.downloadImagebutton = (ImageVIEw)v.findVIEwByID(R.ID.downloadImagebutton);                     vIEwHolder.downloadImagebutton.setimageResource(R.drawable.icon_ok);                     vIEwHolder.downloadImagebutton.setTag("downloaded");                     //rowVIEw.setTag("downloaded");                 }             });           convertVIEw.setTag(vIEwHolder);           }           else{               vIEwHolder= (VIEwHolder)convertVIEw.getTag();            }           vIEwHolder.catlogTitle.setText(data.get(position));           vIEwHolder.catlogTitle.setTypeface(regularDin);           vIEwHolder.icon.setimageResource(R.drawable.cata);           if(vIEwHolder.downloadImagebutton.getTag() == "downloaded"){             downloadImagebutton = (ImageVIEw)convertVIEw.findVIEwByID(R.ID.downloadImagebutton);             downloadImagebutton.setimageResource(R.drawable.icon_ok);           }           else{               downloadImagebutton = (ImageVIEw)convertVIEw.findVIEwByID(R.ID.downloadImagebutton);                 downloadImagebutton.setimageResource(R.drawable.icon_download);           }           vIEwHolder.position = position;        return convertVIEw;       } //close getVIEw

这是我的VIEwHolder类:

static class VIEwHolder{       ImageVIEw downloadImagebutton;       TextVIEw catlogTitle;       ImageVIEw icon;       int position;   }
解决方法 在下面更改您的代码.我想你错过了.
public class AlphabeticalAdapter extends ArrayAdapter<String> {    int layoutResourceID;    private final Context context;    private List<String> data;    private List<String> Tags;    private ProgressDialog mProgressDialog;    private ImageVIEw downloadImagebutton;    public AlphabeticalAdapter(Context context,List<String> data) {        super(context,data);        this.layoutResourceID = resource;        this.context = context;        this.data = data;        Tags = new ArrayList<String>();        int size = data.size();        for (int i = 0; i < size; i++) {            Tags.add("tag");        }    }    static class VIEwHolder {        ImageVIEw downloadImagebutton;        TextVIEw catlogTitle;        ImageVIEw icon;        int position;    }    public VIEw getVIEw(final int position,VIEwGroup parent) {        // VIEw rowVIEw = convertVIEw;        final VIEwHolder vIEwHolder;        if (convertVIEw == null) {            LayoutInflater inflater = (LayoutInflater) context                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);            // convertVIEw = inflater.inflate(R.layout.catalogsList_single_row,// parent,false);            vIEwHolder = new VIEwHolder();            vIEwHolder.position = position;            vIEwHolder.downloadImagebutton                    .setonClickListener(new OnClickListener() {                        @OverrIDe                        public voID onClick(VIEw v) {                            System.out.println("DOWNLOAD pressed");                            vIEwHolder.downloadImagebutton.setTag("downloaded");                            Tags.add(position,"downloaded");                        }                    });            convertVIEw.setTag(vIEwHolder);        } else {            vIEwHolder = (VIEwHolder) convertVIEw.getTag();        }        vIEwHolder.catlogTitle.setText(data.get(position));        vIEwHolder.catlogTitle.setTypeface(regularDin);        vIEwHolder.icon.setimageResource(R.drawable.cata);        if (Tags.get(position) == "downloaded") {            downloadImagebutton.setimageResource(R.drawable.icon_ok);        } else {            downloadImagebutton.setimageResource(R.drawable.icon_download);        }        vIEwHolder.position = position;        return convertVIEw;    } // close getVIEw}
总结

以上是内存溢出为你收集整理的使用ViewHolder的Android列表视图全部内容,希望文章能够帮你解决使用ViewHolder的Android列表视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1136791.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存