首页 > 代码库 > addHeader和removeHeader之间切换时候,出现程序崩溃
addHeader和removeHeader之间切换时候,出现程序崩溃
在做项目的时候,遇到了一个问题。问题过程我在此叙述一遍:在未登录的时候,在好友动态的页面(整个动态的列表使用的是listview)会显示一个头部布局用于提示用于进行登陆;当用户登陆过后,该头部布局则会消失。
然后,在我进行调试的时候,出现了崩溃现象!我是这样进行调试的:首先进入该页面,点击登陆按钮进行登陆。登陆之后,到注销账号页面注销登陆账号。然后再回到这个好友动态页面。然后,问题出现了!报:"Cannot add header view to list -- setAdapter has already been called . " 那该怎么解决这个问题呢?先了解一下listview的setadapter源码是怎么运行的。
public void addHeaderView(View v, Object data, boolean isSelectable) { if (mAdapter != null && ! (mAdapter instanceof HeaderViewListAdapter)) { throw new IllegalStateException( "Cannot add header view to list -- setAdapter has already been called."); } FixedViewInfo info = new FixedViewInfo(); info.view = v; info.data = http://www.mamicode.com/data;>有上面的代码,我们大致可以理解。当listview已经setadapter之后(或者之前已经setadapter,第二次操作addheader),再给listview addheader的时候。根据上面的源码,mAdapter != null 了已经,因此会报错!所有,我们可以重置mAdapter对象。在listview调用addheader方法之前我们就先使用“listView.setAdapter(null);”之后对listview添加头部就行了。我的代码是这样写的:@Override public void onStart() { super.onStart(); if(TextUtils.isEmpty(SharedPreferenceMemoryUtil.getToken(getActivity()))){ listView.setAdapter(null);//解决冲突bug if(!hasHeader){ listView.addHeaderView(headView); }else{ listView.addHeaderView(headView); } hasHeader = true; }else{ if(hasHeader){ listView.removeHeaderView(headView); hasHeader = false; } } requestMethod(); initBroadCastMethod(); }然后,链接一下类似问题朋友的解决方法!addHeader和removeHeader之间切换时候,出现程序崩溃
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。