在Fragment中使用Android Tab布局

3

我是一名可以帮助翻译文本的助手。

我有一个主Activity,其中包含一个导航抽屉,我正在尝试实现一个类似于“播放音乐”应用程序带有选项卡的布局。

MainActivity有一个FrameLayout作为容器:

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

我希望在@+id/container中放置一个带有选项卡的Fragment。
最佳方法是什么?
我认为可以创建一个扩展自Fragment并实现TabListener的MyFragment。相应的布局可能如下所示:
<?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>

但是我该如何继续呢?
1个回答

0

请尝试按照以下步骤操作:

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

代码示例

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 Music,My Library中一样。我认为这不是一个不同的activity,你觉得呢? - Luca122131
我刚刚更新了代码;当然,你也可以在你的片段中做同样的事情。 - Eenvincible
我要避免的步骤是第一个:我怎么样才能使用Fragment而不是FragmentActivity? - Luca122131
我使用FragmentActivity的原因是因为我的页面在用户滑动时加载片段。这是创建带有选项卡(操作栏)的滑动视图的最简单和好的方法。如果您有严重的理由不想使用活动(FragmentActivity),请考虑其他替代方案。 - Eenvincible
如果您在创建适配器和第二级页面时使用片段的片段管理器调用getChildFragmentManager(),则可以使用分页器来完成此操作。 - BK-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接