在用Fragment+TabHost制作分页,遇到了一个问题。
主Activity(继承自FragmentActivity的类)中TabHost的监听器如下:TabHost.OnTabChangeListener tabChangeListener = new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
Debug.v(tabId, "onTabChanged   "+tabId); /** 碎片管理 */
menuFragment = (MenuFragment) fm.findFragmentByTag("menu");
giftFragment = (GiftFragment) fm.findFragmentByTag("gift");
proFragment = (ProductFragment) fm.findFragmentByTag("product");
myselfFragment = (MyselfFragment) fm.findFragmentByTag("myself");
moreFragment = (MoreFragment) fm.findFragmentByTag("more");
ft = fm.beginTransaction(); /** 如果存在Detaches掉 */
if (menuFragment != null)
ft.detach(menuFragment); /** 如果存在Detaches掉 */
if (giftFragment != null)
ft.detach(giftFragment); /** 如果存在Detaches掉 */
if (proFragment != null)
ft.detach(proFragment); /** 如果存在Detaches掉 */
if (myselfFragment != null)
ft.detach(myselfFragment); /** 如果存在Detaches掉 */
if (moreFragment != null)
ft.detach(moreFragment); /** 如果当前选项卡是home */
if (tabId.equalsIgnoreCase("menu")) {
isTabMenu();
CURRENT_TAB = TAB_MENU; /** 如果当前选项卡是wall */
} else if (tabId.equalsIgnoreCase("gift")) {
isTabGift();
CURRENT_TAB = TAB_GIFT; /** 如果当前选项卡是message */
} else if (tabId.equalsIgnoreCase("product")) {
isTabProduct();
CURRENT_TAB = TAB_PRODUCT; /** 如果当前选项卡是me */
} else if (tabId.equalsIgnoreCase("myself")) {
isTabMyself();
CURRENT_TAB = TAB_MYSELF;
} else if (tabId.equalsIgnoreCase("more")) {
isTabMore();
CURRENT_TAB = TAB_MORE;
} else {
switch (CURRENT_TAB) {
case TAB_MENU:
isTabMenu();
break;
case TAB_GIFT:
isTabGift();
break;
case TAB_PRODUCT:
isTabProduct();
break;
case TAB_MYSELF:
isTabMyself();
break;
case TAB_MORE:
isTabMore();
break;
default:
isTabMenu();
break;
} }
ft.commit();
} };
其中的一个方法isTabMyself()为: (其它的类似)public void isTabMyself() { if (myselfFragment == null) {
ft.add(R.id.realtabcontent, new MyselfFragment(), "myself");
} else {
ft.attach(myselfFragment);
}
}
点击某个标签时,能够正常跳转到相应的Fragment。
但是问题来了,每次跳转到该Fragment时,该Fragment的onCreateView和onActivityCreated方法都会被重新执行一次,这样的话原来的数据就都需要重新加载啊另外,我在主Activity(继承自FragmentActivity的类)写了一个广播接收器,收到相应广播时执行isTabMyself()方法,这个时候是可以正常跳过去而且onCreateView和onActivityCreated方法都没有被重新执行的。请教各位,这个问题该怎么解决呢?
tabhostfragment