android-滚动时带有ViewHolder和节的Listview失败

android-滚动时带有ViewHolder和节的Listview失败,第1张

概述我用部分建立一个listview.我使用的是this帖子的答案,之前曾问过一个问题,但又被卡住了.我认为这是一个非常奇怪的错误.当我开始活动时,我可以在屏幕上看到列表,就像我想要的一样.但是,当我尝试开始滚动活动时就崩溃了.我以为我以相同的方式实施了所有 *** 作,但显然不是.我的适配器

我用部分建立一个ListvIEw.我使用的是this帖子的答案,之前曾问过一个问题,但又被卡住了.我认为这是一个非常奇怪的错误.

当我开始活动时,我可以在屏幕上看到列表,就像我想要的一样.但是,当我尝试开始滚动活动时就崩溃了.我以为我以相同的方式实施了所有 *** 作,但显然不是.
我的适配器:

public class DelftAdapter extends BaseAdapter {    private static final int TYPE_ITEM = 0;    private static final int TYPE_SECTION = 1;    private Activity activity;    private  List<ListItem> ListItems;    private static LayoutInflater inflater=null;    public ImageLoader imageLoader;     private final int[] bgcolors = new int[] { R.color.List_odd, R.color.List_even };    public DelftAdapter(Activity a, ArrayList<ListItem> li) {        activity = a;        ListItems = li;        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        imageLoader=new ImageLoader(activity.getApplicationContext());    }    public int getCount() {        return ListItems.size();    }    public Object getItem(int position) {        return position;    }    public long getItemID(int position) {        return position;    }    @OverrIDe    public int getItemVIEwType(int position) {        return ListItems.get(position).isSection() ? TYPE_SECTION : TYPE_ITEM;    }    @OverrIDe    public int getVIEwTypeCount() {        return 2;  // sectionheader and regular item    }    public VIEw getVIEw(int position, VIEw convertVIEw, VIEwGroup parent) {        int type = getItemVIEwType(position);        VIEw vi=convertVIEw;            final ListItem li = ListItems.get(position);            ItemVIEwHolder itemHolder;            SectionVIEwHolder sectionHolder;             switch (type) {             case TYPE_SECTION: // is sectionheader                 if (vi == null) { //convertvIEw==null                sectionHolder = new SectionVIEwHolder();                vi = inflater.inflate(R.layout.sectionedListitem, null);                vi.setonClickListener(null);                vi.setonLongClickListener(null);                vi.setLongClickable(false);                sectionHolder.Title = (TextVIEw) vi.findVIEwByID(R.ID.List_header_Title);               }else{//convertvIEw is not null                   sectionHolder = (SectionVIEwHolder)vi.getTag();               }                   SectionItem si = (SectionItem)li;                   sectionHolder.Title.setText(si.getTitle());                break;             case TYPE_ITEM:// no sectionheader                if (vi == null) { //convertvIEw==null                    itemHolder = new ItemVIEwHolder();                    vi = inflater.inflate(R.layout.singleListitem, null);                    itemHolder.name=(TextVIEw)vi.findVIEwByID(R.ID.tvname);                    itemHolder.tip=(TextVIEw)vi.findVIEwByID(R.ID.tvtip);                    itemHolder.image=(ImageVIEw)vi.findVIEwByID(R.ID.image);                }else{  // convertvIEw != null                    itemHolder = (ItemVIEwHolder)vi.getTag();                }                ListData ld = (ListData)li;                itemHolder.name.setText(ld.name);                itemHolder.tip.setText(ld.tip);                        if (ld.photoUrl != null ){                            imageLoader.displayImage(ld.photoUrl, itemHolder.image);                        }else{                            itemHolder.image.setimageURI(Uri.fromfile(new file("//assets/nopic.png")));                        }                        // alternating colors                    int colorPos = position % bgcolors.length;                    vi.setBackgroundResource(bgcolors[colorPos]);                    break;                 }        return vi;}    public static class SectionVIEwHolder {        public TextVIEw Title;    }    public static class ItemVIEwHolder {        public TextVIEw name;        public TextVIEw tip;        public ImageVIEw image;    }}

我为两种不同的视图构建了两个VIEwHolders.发生的错误是itemHolder.name.setText(ld.name);上的NullPointerException;线.
我没有得到的是该代码适用于前几个条目,但是当我开始滚动时却失败了.在我正在使用的数据中,名称和提示永远不会为空,只有photoUrl可能是但代码中已涵盖.

有人知道为什么这段代码会失败吗?

解决方法:

在创建新的视图保持器并为新视图充气的代码路径中,实际上从未将vIEwHolder存储在VIEws标记中,因此,当滚动并获取一个exisitng视图时,vIEw.gettag()返回null,稍后再尝试时并使用VIEwHolder获得Null指针异常.您需要将调用添加到setTag().

总结

以上是内存溢出为你收集整理的android-滚动时带有ViewHolder和节的Listview失败全部内容,希望文章能够帮你解决android-滚动时带有ViewHolder和节的Listview失败所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1085709.html

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

发表评论

登录后才能评论

评论列表(0条)

保存