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]);
			}
		}

你可能感兴趣的:(String)