在TabHost中切换片段

时间:2015-08-05 21:21:27

标签: java android android-fragments

这是我的布局设计:

    MainActivity
         |
    MainFragment
         |
      TabHost
         |
_____________________
|     |     |     |
Tab1  Tab2  Tab3  Tab4
      |
     ft.replace(MainActivityContainer, FragmentThatDoesSomething)
      |
   FragmentThatDoesSomething

正如您所看到的,有一个按钮可以在主活动容器上执行ft替换,并加载FragmentThatDoesSomething来完成任务。

在FragmentThatDoesSomething中我想要一个按钮返回TabHost的Tab2并保留标签。

我使用活动在片段之间传输数据,因此在活动中我想执行一些ft事务以返回到tab2。

最简单的方法是什么?如果我使用getChildFragmentManager和Tab2的容器运行ft事务,我会遇到this problem

因为我正在使用支持v4 Fragment类。

3 个答案:

答案 0 :(得分:0)

我会将addToBackStack(null)用于我的片段交易。然后FragmentThatDoesSomething中定义的按钮可以调用getActivity.onBackPressed()

此时只需要确保保存状态。

// MainActivity.java
@Override
public void someCallbackMethod(Object obj1, Object obj2) {
    // have MainActivity store your values and Tab2 fragment accesses data
    // through callback references when Tab2.onCreateView() is called.

    onBackPressed();

    // OR retrieve your Tab2 fragment and manually update values here via 
    // some kind of accessor
}

答案 1 :(得分:0)

I chose to implement activities as handling nested fragments are a pain.

One gotcha I ran into was sending data back from FragmentThatDoesSomething (now an activity) back to Tab 2. Because Tab 2 is a nested fragment of MainFragment, I had to override onActivityResult in MainFragment to send data back to the child Tab 2. I think its because I'm using the v4 Fragment support class.

I did that using this code.

答案 2 :(得分:0)

编译'com.android.support:design:22.2.0' 我需要使用上面的材料设计库来解决您的问题。 您可以在一个viewPager中添加多个片段。

它将为您提供更多其他选择。