蛋疼的Android BaseAdapter

 1 package com.moniter.helperclasses;
 2
 3 import java.util.List;
 4
 5 import android.content.Context;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 import android.widget.BaseAdapter;
10 import android.widget.ImageView;
11 import android.widget.TextView;
12
13 import com.hanvon.moniter.R;
14
15 public class SiteListAdapter extends BaseAdapter {
16
17     // 地点列表
18     private List<SiteInformation> sites = null;
19     private LayoutInflater mInflater;
20
21     // Constructor
22     public SiteListAdapter(Context context, List<SiteInformation> sites) {
23         this.sites = sites;
24         this.mInflater = LayoutInflater.from(context);
25     }
26
27     // 返回列表项数
28     @Override
29     public int getCount() {
30         return sites.size();
31     }
32
33     @Override
34     public Object getItem(int position) {
35         return sites.get(position);
36     }
37
38     @Override
39     public long getItemId(int position) {
40         return position;
41     }
42
43     @SuppressWarnings("null")
44     @Override
45     public View getView(int position, View convertView, ViewGroup parent) {
46         // 取得位置position对应的site信息
47         SiteInformation siteInfo = sites.get(position);
48
49         //取得ListView的布局文件
50         convertView = mInflater.inflate(R.layout.site_list_item, null);
51
52         //初始化viewHolder
53         ViewHolder viewHolder = null;
54
55         //View的绑定
56         if (convertView == null) {
57             viewHolder = new ViewHolder();
58             viewHolder.site_name = (TextView) convertView
59                     .findViewById(R.id.name_site);
60             viewHolder.value_noise = (TextView) convertView
61                     .findViewById(R.id.noise);
62             viewHolder.value_dust = (TextView) convertView
63                     .findViewById(R.id.dust);
64             viewHolder.status_noise = (ImageView) convertView
65                     .findViewById(R.id.color_indicator_noise);
66             viewHolder.status_dust = (ImageView) convertView
67                     .findViewById(R.id.color_indicator_dust);
68
69             convertView.setTag(viewHolder);
70         } else {
71             viewHolder = (ViewHolder) convertView.getTag();
72         }
73
74         //取得相应的值:抱错!!!!!为什么????
75         viewHolder.site_name.setText("123");  //???siteInfo.getSiteName()
76         viewHolder.value_noise.setText(siteInfo.getNoiseValue());
77         viewHolder.value_dust.setText(siteInfo.getDustValue());
78         viewHolder.status_noise.setBackgroundResource(siteInfo.getNoiseStatus());
79         viewHolder.status_dust.setBackgroundResource(siteInfo.getDustStatus());
80
81         //返回Poistion对应的view
82         return convertView;
83     }
84
85     static class ViewHolder {
86         public TextView site_name;
87         public TextView value_noise;
88         public TextView value_dust;
89         public ImageView status_noise;
90         public ImageView status_dust;
91     }
92 }

老是在第75行报错。搞了一天了没有发现原因。

06-16 18:09:50.232: E/AndroidRuntime(10487): FATAL EXCEPTION: main
06-16 18:09:50.232: E/AndroidRuntime(10487): java.lang.NullPointerException
06-16 18:09:50.232: E/AndroidRuntime(10487): at com.moniter.helperclasses.SiteListAdapter.getView(SiteListAdapter.java:75)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.AbsListView.obtainView(AbsListView.java:2040)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.ListView.makeAndAddView(ListView.java:1772)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.ListView.fillDown(ListView.java:672)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.ListView.fillFromTop(ListView.java:732)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.ListView.layoutChildren(ListView.java:1625)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.AbsListView.onLayout(AbsListView.java:1870)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.View.layout(View.java:11418)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.ViewGroup.layout(ViewGroup.java:4328)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1652)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1510)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.onLayout(LinearLayout.java:1415)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.View.layout(View.java:11418)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.ViewGroup.layout(ViewGroup.java:4328)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1652)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1510)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.onLayout(LinearLayout.java:1415)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.View.layout(View.java:11418)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.ViewGroup.layout(ViewGroup.java:4328)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1652)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1510)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.onLayout(LinearLayout.java:1415)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.View.layout(View.java:11418)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.ViewGroup.layout(ViewGroup.java:4328)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:930)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.View.layout(View.java:11418)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.ViewGroup.layout(ViewGroup.java:4328)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.FrameLayout.onLayout(FrameLayout.java:443)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.View.layout(View.java:11418)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.ViewGroup.layout(ViewGroup.java:4328)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1652)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1510)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.LinearLayout.onLayout(LinearLayout.java:1415)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.View.layout(View.java:11418)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.ViewGroup.layout(ViewGroup.java:4328)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.widget.FrameLayout.onLayout(FrameLayout.java:443)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.View.layout(View.java:11418)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.ViewGroup.layout(ViewGroup.java:4328)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1489)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.os.Handler.dispatchMessage(Handler.java:99)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.os.Looper.loop(Looper.java:137)
06-16 18:09:50.232: E/AndroidRuntime(10487): at android.app.ActivityThread.main(ActivityThread.java:4441)
06-16 18:09:50.232: E/AndroidRuntime(10487): at java.lang.reflect.Method.invokeNative(Native Method)
06-16 18:09:50.232: E/AndroidRuntime(10487): at java.lang.reflect.Method.invoke(Method.java:511)
06-16 18:09:50.232: E/AndroidRuntime(10487): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-16 18:09:50.232: E/AndroidRuntime(10487): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-16 18:09:50.232: E/AndroidRuntime(10487): at dalvik.system.NativeStart.main(Native Method)

最后只好求助.Stackoverflow发问题时网页经常出问题,只好改加QQ群,最后得到android学习交流群的“成都-Young”提点,终于解决问题:

第50行的

convertView
//取得ListView的布局文件
50         convertView = mInflater.inflate(com.hanvon.moniter.R.layout.site_list_item, null);

放到56行的if语句里面进行初始化,这样convertView在为Null的时候就能正常初始化,而不是每次都提前初始化一个值,就直接运行71行的代码。

55         //View的绑定
56         if (convertView == null) {convertView = mInflater.inflate(com.hanvon.moniter.R.layout.site_list_item, null);
}

蛋疼的Android BaseAdapter

时间: 2024-08-30 09:39:02

蛋疼的Android BaseAdapter的相关文章

Android BaseAdapter用法

BaseAdapter 适配器 BaseAdapter是一个抽象类,因此要写自已的适配器,段继承此类,并实现以下方法: @Overridepublic int getCount() { return 0; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Overridepublic View g

Android BaseAdapter 适配基础类

Android基础类之BaseAdapter BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView.Spinner.Gallery及GridView等UI显示组件,它是继承自接口类Adapter, 1.Adapter类简介 1).Adapter相关类结构如下图所示: 自定义Adapter子类,就需要实现上面几个方法,其中最重要的是getView()方法,它是将获取数据后的View组件返回,如ListView中每一行里的TextV

Android BaseAdapter和ViewHolder 优化 解决ListView的item抢焦点问题和item错乱问题

首先赞下hyman大神 曾经仅仅是简单的重写个BaseAdapter,将getView方法保持抽象.而ViewHolder没有抽象过. .. ViewHolder (用了一个集合+泛型管理存取view) /** * author : stone * email : [email protected] * time : 15/7/24 14 27 */ public class StoneViewHolder { private int mPosition; private View mConve

Android BaseAdapter ListView (明星简介列表)

1.搭建布局 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" > 4 5 <ListView 6 android:id="@+id/lv" 7 andr

android BaseAdapter优化

1.getCount()方法: android提供了N多已经封装好的适配器,但用得最多还是BaseAdapter.如果写一个类继承BaseAdapter,则会看到它至少要覆写四个方法: public class MAdapter extends BaseAdapter{ @Override public int getCount() { // TODO Auto-generated method stub return 0; } @Override public Object getItem(i

Android——BaseAdapter相关

layout文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="ma

Android BaseAdapter加载多个不同的Item布局时出现UncaughtException in Thread main java.lang.ArrayIndexOutOfBoundsException: length=15; index=15

java.lang.ArrayIndexOutOfBoundsException: length=15; index=15 异常出现的场景:在做聊天界面时,需要插入表情,图片,文字,名片,还有几种较为复杂的布局.这时就需要用到BaseAdapter中的getViewTypeCount()和getItemViewType(int position) 方法了,在发送复杂界面时出现了这个异常. 令人抓狂的是这个异常居然是UncaughtException,根本无法判断哪一行出错了,刚开始的时候觉得一定

Android BaseAdapter和ViewHolder 优化

首先赞下hyman大神 以前只是简单的重写个BaseAdapter,将getView方法保持抽象.而ViewHolder没有抽象过... ViewHolder (用了一个集合+泛型管理存取view) /** * author : stone * email : [email protected] * time : 15/7/24 14 27 */ public class StoneViewHolder { private int mPosition; private View mConvert

Android, BaseAdapter 处理大数据量时的优化

Android优化 最常见的就是ListView, Gallery, GridView, ViewPager 的大数据优化  图片优化  访问网络的优化优化的原则: 数据延迟加载  分批加载  本地缓存数据优化   1).复用contentview                   2).创建static class ViewHolder                 3).分批加载 滑动监听 或者按钮  显示更多数据  往下拖动 显示 图片优化  1).异步加载           2).