TabHost clear tab后,要新加tab时,使用注意,不然会杯具

在使用TabHost做主页,然后各个Activtiy作为tab,在做用户登录时有个问题,就是在当前登录页面登录成功后,页面要换成已登录成功的信息页面。

本来是没有任何问题的。不过在开发过程中,其他页面的Actvitiy会调用登录界面,这时杯具产生了(因为还没改相应处理代码,改掉之后不会有问题),这里登录成功后也会用broadcast通知tabHost来更新页面。然后发生NullPointerException.

 

后来将tab顺序换了,就是先tabHost.addTab()时第一个先加入当前页面的tab.但发现还是不行。

我之前是怀疑如果tabHost clearAllTabs之后,要按照第一次添加的顺序来作。但是因为TabSpec可以变,所以这个想法不成立。后来在网上搜了下,有人说解决方法是

tabHost.setCurrentTab(0); 分析了下。应该是由于tabHost记住了之前的CurrentTab index,所以每添加一个tab会设定一次currentTab,导致clear之后,如果新加,这里如果index不为0,则会出现空指针错误,因为这时所有tab都被clear掉了,当然除了当前加的index 为 0的tab之外,其他tab是不存在的。。。

 

结论:这应该是属于TabHost可以再改进的地方吧。在clearAllTabs之后,应该自动将currentTab的索引值改掉,以免发生空指针的情况。目前只有靠大家手动来改罗。

 

 最好的方法是获取当前tab,然后新建的时候把当前tab先建立起来:

String currentTabTag = tabHost.getCurrentTabTag();
		tabHost.setCurrentTab(0);
		tabHost.clearAllTabs();
		for(int i=0; i<5; i++){
			if(mTabs[i].getTag().equals(currentTabTag)){
				tabHost.addTab(mTabs[i]);
				break;
			}
		}
		
		for(int i=0; i<5; i++){
			if(!mTabs[i].getTag().equals(currentTabTag)){
				tabHost.addTab(mTabs[i]);
			}
		}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值