使用带有导航抽屉的ViewPager的操作栏选项卡

10

需求:使用ViewPager和导航抽屉创建Action Bar选项卡。

我可以创建一个导航抽屉示例。

http://www.omgubuntu.co.uk/wp-content/uploads/2013/07/sidebar.jpg

可以分别使用ViewPager创建Action Bar选项卡。

http://developer.android.com/design/media/action_bar_pattern_considerations.png

但是当我尝试同时使用两者时,出现了问题。

我可以使用片段创建导航抽屉和使用片段创建Action Bar选项卡。但两个示例的初始活动都是片段活动。

如何在导航抽屉中的片段上实现操作栏选项卡?


你遇到了什么问题? - Alex Curran
无法在片段中实现操作栏选项卡,因为它似乎需要一个活动或片段活动... - user1586758
好的,我可以问一下为什么您需要同时使用选项卡和导航抽屉吗? - Alex Curran
1
是的,我想要使用NavigationDrawer从主屏幕导航到子级屏幕,然后使用选项卡显示多级内容... - user1586758
@chakradharg13,你有解决方案吗?我也卡在同样的问题上了...你能帮忙吗? - user4050065
3个回答

8
使用操作栏选项卡的问题在于当抽屉出现时,它会出现在选项卡下面,因为选项卡是操作栏的一部分。
我尝试使用tabHost代替,效果要好得多。
您可以在此处获取源代码:https://github.com/jiahaoliuliu/DrawerWithTabsAndViewPager 以下是一些关于它的简要说明:
  1. 第一级有一个抽屉,来自v4支持库
  2. 在抽屉中,第一个元素是tabHost,我已将内容的宽度和高度设置为0。
  3. 在tabhost下面,有viewpager。
一旦所有内容都被创建,我所做的就是为tabhost创建一个监听器,另一个监听器用于viewPager,因此当用户单击任何选项卡时,viewpager将设置当前项目,反之亦然。
享受编码!

另一个解决方案可能是滑动选项卡(https://www.youtube.com/watch?v=tRg_eDfQ8fk),就像谷歌为其Play商店应用程序所拥有的那样。我不喜欢的是选项卡没有完全填充屏幕时,它看起来有点奇怪(使用wrap_content而不是match_parent)。 - jiahao
帮我解决这个问题:http://stackoverflow.com/questions/31114379/how-to-add-tabhost-in-navigation-drawer - Aditya

6
请使用以下布局作为您的主活动布局。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager_container"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#ffe6e1d4"
        android:focusable="true"
        android:focusableInTouchMode="true" />    

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:listSelector="@drawable/drawer_list_selector"        
        android:background="@color/drawer_bg" />

</android.support.v4.widget.DrawerLayout>

按照APPTabsAdapter中所示编写FragmentPagerAdapter。

以下是我在其中一个项目中构建它的方式。

如果需要,您可以尝试并请求帮助。

或者

您可以从这个GitHub Repo获得帮助。

谢谢。


1
我理解了这个概念,并且在activity或fragmentactivity中实现时它可以运作,但是如何让它在位于导航抽屉中的fragment上工作呢? - user1586758
1
我不想使用actionbarsherlock,想要使用内置功能...谢谢。 - user1586758
1
你提供的示例正是我所需要的,但我不想使用ActionBarSherlock。 - user1586758
@jagmohan能否告诉您如何在导航抽屉中添加TabHost?http://stackoverflow.com/questions/31114379/how-to-add-tabhost-in-navigation-drawer - Aditya
@jagmohan,你说过你会发布博客文章的。你能提供链接吗?我已经寻找了3天关于导航抽屉、工具栏和ViewPager的帮助。请帮帮我。 - GreenROBO
显示剩余6条评论

1
正如您所注意到的那样,ActionBar选项卡与导航抽屉不太兼容,并且这种设计模式已经在API 21中被弃用
我使用了Android开发人员中SlidingTabs示例中的类来实现此效果,而无需包含第三方库依赖项,并对结果感到非常满意。还有一个视频教程

我很惊讶谷歌在API 21中已经弃用了它。仍有许多优秀的项目在使用它(例如Etsy)。让我们看看编程社区的反应。故事才刚刚开始。 - jiahao
Android开发者网站上的培训示例代码仍然使用NAVIGATION_MODE_TABS。而Google Play商店似乎使用操作栏选项卡?对吗? - liam xu
不,最新版的Google Play(5.1.11)正如我的示例一样使用滑动选项卡(例如导航到“店铺应用程序”)。 - Tim Rae

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