在用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
主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
解决方案 »
- 将tcpdump -p -nnn -vvv -s 0 -w /sdcard/1.pcap代码写进了JAVA程序不能对android真机进行抓包
- 如何查看Task中的Activity
- 为什么有的时候屏幕不旋转
- android wifi问题 各位大仙 大牛 帮帮忙啊!!
- 数据库表中的记录删不掉也更新不了???
- 几个解决了就成为中级android应用开发人员的问题!呵呵
- 闹钟问题(急)
- 开发的一个android程序,总是显示无法运行,就退出了。但是没有报错。求大神解救啊!
- 0x41b79c68异常
- Android Studio运行按钮是灰的
- 安卓开发基础问题
- fragment中加入tabhost,标签能显示但内容始终不能显示,哪位能帮帮忙啊
还有可以加入到fragment管理栈中