ps: android 2.3经常会出现这种问题
class="csharpcode">Caused by: java.lang.NullPointerException at android.widget.ListView.clearRecycledState(ListView.java:522) at android.widget.ListView.resetList(ListView.java:508) at android.widget.ListView.setAdapter(ListView.java:440) at com.company.myapp.MyActivity.refreshList(MyActivity.java:85) at com.company.myapp.MyActivity.onCreate(MyActivity.java:37) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) ... 11 mored
当发生这种状况 ,eclipse得到的异常就在你listView.setAdapter(adapter);这句话中,你怎么看listView和adapter都没有空值,正纳闷时,你应该要考虑一下被你添加的FooterView或者HeaderView是否为null,因为空的话。。。ListView就无法测量高度。。。然后无法布局。。最后就报错了。。。还有addFooterView和addHeaderView这两个方法一定要放在listView.setAdapter(adapter)前面,要不然死活都不会出现你想要的FooterView或者HeaderView
mLoadingLayout = (FrameLayout) View.inflate(this, R.layout.load, null);
listView.addFooterView(mLoadingLayout);
listView.requestFocus();
这是listview尾部添加一个进度条。
listView.removeFooterView(mLoadingLayout);
这是移除尾部的进度条。
有时候在移除时回报空指针,但listview不为null , mLoadingLayout也不为null,但还是报空指针,原因是因为listview要分为三部分。一是头部,二是中间部,三是尾部。在设置了头部或尾部时,必须要有中间部才能真正意义上的生效。没生效就去移除就会报空指针错误。
所以在 listView.removeFooterView(mLoadingLayout)时
必须先调用 listView.setAdapter(adapter);(设置中间部)
adapter可以数据可以为0但不可为null