【问题标题】:Android Tab Layout inside Fragment片段内的Android选项卡布局
【发布时间】:2014-08-24 21:09:55
【问题描述】:

我有一个带有导航抽屉的主 Activity,我正在尝试实现一个布局,例如带有标签的 Play Music App。

MainActivity 有一个像容器一样的 FrameLayout:

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

我想在@+id/container 中放入一个带有标签的片段。

最好的方法是什么?

我想我可以创建一个 MyFragment 来扩展 Fragment 并实现 TabListener。 相关的布局可能像

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</android.support.v4.view.ViewPager>

但是我该如何继续呢?

【问题讨论】:

    标签: android android-fragments android-tabs


    【解决方案1】:

    尝试以下步骤:

    • 首先,创建您的活动并扩展 FragmentActivity 并实现 TabListener
    • 其次,创建您的 TabsPagerAdapter
    • 第三,创建您的片段(如果需要多个片段,则创建片段)。
    • 然后,您可以在向选项卡请求导航模式后在 Activity 中设置适配器。

    代码示例

    public class SampleActivity extends FragmentActivity implements ActionBar.TabListener {
    
        private ViewPager viewPager;
        private ActionBar actionBar;
        private TabsPagerAdapter mAdapter;
    
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
    
            requestWindowFeature(Window.FEATURE_ACTION_BAR);
            setContentView(R.layout.gd_pager);
    
            getActionBar().setDisplayHomeAsUpEnabled(true);
    
            viewPager = (ViewPager) findViewById(R.id.pager);
            actionBar = getActionBar();
    
            actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    
            String [] tabs = new String[]{"Tab1", "Tab2", "Tab3", "Tab3"};
    
            for(String tab : tabs)
            {
    
               actionBar.addTab(actionBar.newTab()
                    .setText(tab)
                    .setTabListener(this));
            }
    
            mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
            viewPager.setAdapter(mAdapter);
    
    
           @Override
           public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
           {
               viewPager.setCurrentItem(tab.getPosition());
    
             viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
             {
    
                 @Override
                 public void onPageSelected(int position)
                 {
                     actionBar.setSelectedNavigationItem(position);
                 }
    
                 @Override
                 public void onPageScrolled(int arg0, float arg1, int arg2)
                 {
                 }
    
                 @Override
                 public void onPageScrollStateChanged(int arg0)
                 {
                 }
            });
        }
    
        @Override
        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
    
        }
    
        @Override
        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
    
       }
    }
    

    【讨论】:

    • 感谢您的回复,但我不会更改 Activity,我会在 MainActivity 中包含的 Fragment 中实现这一点。就像在 Google Paly 音乐,我的图书馆中一样。我不认为这是一项不同的活动,对吗?
    • 我刚刚更新了代码;当然,你可以在你的片段中做同样的事情
    • 我要避免的步骤是第一步:如何使用 Fragment 而不是 FragmentActivity ?
    • 我之所以使用 FragmentActivity 是因为我的寻呼机在用户滑动时会加载片段。这是使用选项卡(操作栏)创建滑动视图的最简单也是最好的方法。你决定;如果有严重的原因不想使用活动 (FragmentActivity),请考虑替代方案。
    • 如果您使用 Fragment 的片段管理器,也可以通过在创建适配器和二级寻呼机时调用 getChildFragmentManager() 来使用寻呼机。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多