我用部分建立一个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失败所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)