Android TabLayout(API 22)在没有ViewPager的情况下为每个选项卡添加片段

时间:2015-06-20 10:20:40

标签: android android-fragments

我正在尝试Android的新TabLayout类,在我的ActionBar下面添加两个标签。每个选项卡将托管不同的片段。

此外,我不希望能够在我的两个标签之间滑动 - 在我的标签之间导航,我希望能够只触摸我想要导航到的标签。

在我的MainActivity中,我有:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
    tabLayout.addTab(tabLayout.newTab().setText("Newsfeed"));
    tabLayout.addTab(tabLayout.newTab().setText("Random"));

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            // IDEALLY HERE, I'd like to do something like
            // tab.setFragment(new MainFragment()).
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
 }

所以我想覆盖我的onTabSelected和onTabReselected方法,这样在两个标签之间切换会分别显示两个不同的片段。我在网上找不到很多关于独立于ViewPager的新TabLayout。

任何线索?谢谢!

1 个答案:

答案 0 :(得分:7)

@Override
public void onTabSelected(TabLayout.Tab tab) {
  Fragment f=heyWhatFragmentGoesInThisTab(tab);

  getFragmentManager()
    .beginTransaction().replace(R.id.where_the_tab_contents_go, f).commit();
}

你需要写的地方:

  • heyWhatFragmentGoesInThisTab()返回应根据所选标签显示的Fragment

  • R.id.where_the_tab_contents_goFrameLayout,用作活动片段的容器

IOW,您更改片段以响应TabLayout,就像更改片段以响应操作栏项目点击,导航抽屉项目点击或任何其他GUI事件一样。