您的位置:首页 > 其它

listview添加header时的注意事项

2015-11-13 15:01 344 查看
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(
R.layout.header, null);
,这里的this是FrameLayout,所以才抛出异常的。
所以解决办法很简单,就是LinearLayout    loadMoreLayout = (LinearLayout) mInflater.inflate(
R.layout.header, null);this,改为null就行

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: