LayoutInflater mInflater = (LayoutInflater) getActivity() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout loadMoreLayout = (LinearLayout) mInflater.inflate(R.layout.header, null);
如上方法,这里的header是我为listview准备的header布局,里面xml情况是这样
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.scdl.zny.view.SlideShowView android:id="@+id/ssv" android:layout_width="fill_parent" android:layout_height="250dp"></com.scdl.zny.view.SlideShowView> </LinearLayout>在添加之后程序一直奔溃显示无法成功
LinearLayout loadMoreLayout = (LinearLayout) mInflater.inflate(这个是本来的方法R.layout.header, this);
下面看一段lsitview的源码
/** * The list is empty. Clear everything out. */ @Override void resetList() { // The parent's resetList() will remove all views from the layout so we need to // cleanup the state of our footers and headers clearRecycledState(mHeaderViewInfos); clearRecycledState(mFooterViewInfos); super.resetList(); mLayoutMode = LAYOUT_NORMAL; } private void clearRecycledState(ArrayList<FixedViewInfo> infos) { if (infos != null) { final int count = infos.size(); for (int i = 0; i < count; i++) { final View child = infos.get(i).view; final LayoutParams p = (LayoutParams) child.getLayoutParams(); if (p != null) { p.recycledHeaderFooter = false; } } } }这里的 mFooterViewInfos 实际上就是我们添加的Footer view的一个列表。代码里循环处理每个footer view,而在getLayoutParams()时,ListView要求必须是AbsListView的LayoutParams,而在我们自己的代码中:LinearLayout loadMoreLayout = (LinearLayout) mInflater.inflate(,这里的this是FrameLayout,所以才抛出异常的。R.layout.header, null);
所以解决办法很简单,就是LinearLayout loadMoreLayout = (LinearLayout) mInflater.inflate(R.layout.header, null);this,改为null就行
listview添加header时的注意事项
最新推荐文章于 2023-01-06 16:30:11 发布