显示 ActionBar 选项卡的两个片段

Posted

技术标签:

【中文标题】显示 ActionBar 选项卡的两个片段【英文标题】:Showing two fragments for an ActionBar Tab 【发布时间】:2012-10-27 16:15:40 【问题描述】:

我使用 Eclipse 项目向导创建了一个带有 ActionBar 和选项卡的项目。该向导为每个选项卡创建一个虚拟片段,其中包含仅显示选项卡编号的虚拟文本。该应用程序可以正常运行。

代码如下:

   @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) 
        // When the given tab is selected, show the tab contents in the container

        Fragment fragment = new DummySectionFragment();
        Bundle args = new Bundle();
        args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, tab.getPosition() + 1);
        fragment.setArguments(args);
        getFragmentManager().beginTransaction()
                .replace(R.id.container, fragment)
                .commit();
    

   /** 
     * A dummy fragment representing a section of the app, but that simply displays dummy text.
     */
    public static class DummySectionFragment extends Fragment 
        public DummySectionFragment() 
        

        public static final String ARG_SECTION_NUMBER = "section_number";



        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
            TextView textView = new TextView(getActivity());
            textView.setGravity(Gravity.CENTER);
            Bundle args = getArguments();
            textView.setText(Integer.toString(args.getInt(ARG_SECTION_NUMBER)));
            return textView;
        
    

为了我的应用程序的目的,我想在设备处于纵向模式时显示一个片段,而在设备处于横向模式时显示两个片段。我知道莎士比亚样本,但在这个样本中,它是一个包含一个或两个片段的活动。

莎士比亚示例使用两种不同的布局。对于纵向模式(在“layout\fragment_layout_support.xml”中):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_ android:layout_>
    <fragment class=".FragmentLayoutSupport$TitlesFragment"
            android:id="@+id/titles"
            android:layout_ android:layout_ />
</FrameLayout>

对于横向模式(在“layout-land\fragment_layout_support.xml”中):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_ android:layout_>

    <fragment class=".FragmentLayoutSupport$TitlesFragment"
            android:id="@+id/titles" android:layout_weight="1"
            android:layout_ android:layout_ />

    <FrameLayout android:id="@+id/details" android:layout_weight="1"
            android:layout_ android:layout_ />

</LinearLayout>

莎士比亚示例加载布局如下:

public class FragmentLayoutSupport extends FragmentActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        //setTheme(SampleList.THEME); //Used for theme switching in samples
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_layout_support);
    
...

如果我的应用无法在 FragmentActivity 中加载布局,我该如何做同样的事情?

谢谢。

【问题讨论】:

我的意思是说赏金中的两个列表视图片段。谢谢你问这个@Ole 【参考方案1】:

也许你被卡住了,因为你不知道 ActionBarActivity 继承 FragmentActivity ?

所以简单替换

extends FragmentActivity

extends ActionBarActivity

以及正确的导入(参见ActionBar API Guide)。然后,您将能够实现与莎士比亚示例中相同的行为,同时保留您的 ActionBar/Tabs。只需在您之前工作的活动中扩展 FragmentLayoutSupport 而不是 ActionBarActivity。

【讨论】:

感谢您的回复。我们团队的另一位开发人员去年解决了这个问题——从那以后代码发生了很大的变化,所以很遗憾我无法说出它是如何解决的。建议的答案似乎是对可能出错的一个很好的建议。所以我会给答案竖起大拇指。 连日期都没看!我被困了一个小时不知道然后我回答了我在解决过程中发现的这个问题。

以上是关于显示 ActionBar 选项卡的两个片段的主要内容,如果未能解决你的问题,请参考以下文章

IllegalArgumentException:快速切换 ActionBar 选项卡时没有找到片段 id 的视图

如何在每个导航选项卡的片段内创建 2 个片段

ActionItem 在屏幕旋转时丢失

带有片段的 ActionBar 选项卡旋转

加载器将结果传递给错误的片段

是否可以使 ActionBar 选项卡的高度高于 ActionBar 的高度?如果是这样,怎么做?