android下ListView的奇异异常大集合(持续更新)

  1. 使用ListView的addFooterView或者addHeaderView报错或者不知名的异常:at android.widget.ListView.clearRecycledState(ListView.java:522)


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;   ps: android 2.3经常会出现这种问题



  1. 我们通常在加载数据时,为了省流量不会一次性把数据全部下完,一般是分段下载。分段下载一般会在listview最后面放一个进度条表示正在加载数据,当数据加载完时,我们又要清除它。这时候就要注意了。
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

你可能感兴趣的:(android学习,android进阶知识)