如何在ActionBar中引入可滑动标签?

时间:2015-07-25 21:57:48

标签: android android-fragments android-activity tabs android-tabs

我正在关注学习Android应用开发的“The Big Nerd Ranch Guide”教科书。 (顺便说一下,这是多么好的书!:))我很享受我的学习过程。我的Java知识有限,所以需要一些时间。

我目前的情况是:

我有兴趣介绍Swipeable Tab视图,但是教科书没有涵盖该部分(可以覆盖Swipeable,但不包括制表视图)。

在该书的第9章中,他解释了如何使用抽象超类(基本上是用于托管单个片段的抽象活动)来重用托管视图。

所以,在我的应用程序开发中,我有一个名为:

的抽象类
public abstract class SingleFragmentActivity extends FragmentActivity {
protected abstract Fragment createFragment();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_container_layout);

    FragmentManager fm = getSupportFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);
    if (fragment == null) {
        fragment = createFragment();
        fm.beginTransaction()
                .add(R.id.fragmentContainer, fragment)
                .commit();
      }
   }
}

从这个抽象类我扩展了我的主要活动,我正在启动一个名为TheZooList的片段:

public class MainActivity extends SingleFragmentActivity {

@Override
protected Fragment createFragment() {

    return new TheZooList();}
}

TheZooList现在扩展了一个片段,使用ArrayAdapter它显示了一长串动物和鸟类。

public class TheZooList extends Fragment
{...}

我希望有两个单独的清单,一个用于动物,一个用于植物,每个都在自己的标签中。

我基本上都被困在这里。从一个流行的blog我能够理解如何引入android中的选项卡,但我无法在我的项目中关联和实现它。

例如,他们使用implements ActionBar.TabListener

public class MainActivity extends FragmentActivity implements
        ActionBar.TabListener {,,,}

在我的项目中,我应该为哪个课程implements ActionBar.TabListenerMainActivityTheZooList片段?

非常感谢对后续步骤的任何指导。

3 个答案:

答案 0 :(得分:1)

有一个很棒的教程涵盖了这个主题。查看此链接http://developer.android.com/training/implementing-navigation/lateral.html

简而言之:您应该使用ViewPager和标准ActionBar选项卡的组合。您需要确保在使用任一导航方式更改选项卡时都会收到通知。在提供的链接中详细讨论了实现。

祝你好运。

答案 1 :(得分:1)

您的问题可能会引起意见。所以这是我的建议。 <figure> <a href="img/large-image/1.jpg" itemprop="contentUrl" data-size="1024x1024"> <img src="img/small-thumbnail/1.jpg" itemprop="thumbnail" alt="Image description" /> </a> <figcaption itemprop="caption description">Image caption 1</figcaption> </figure> <figure> <a href="img/large-image/2.jpg" itemprop="contentUrl" data-size="964x1024"> <img src="img/small-thumbnail/2.jpg" itemprop="thumbnail" alt="Image description" /> </a> <figcaption itemprop="caption description">Image caption 2</figcaption> </figure> <figure> <a href="img/large-image/3.jpg" data-size="683x683"> <img src="img/small-thumbnail/3.jpg" itemprop="thumbnail" alt="Image description" /> </a> <figcaption itemprop="caption description">Image caption 3</figcaption> </figure> 类表示一个片段,这意味着一个片段只能包含一个标签(这也是一个意见)。但是,包括Google在内的示例项目使用的选项卡只包含一个片段,但它并未遵循本书的示例代码。因此,ActionBar.TabListener在MainActivity中有意义。明白了吗? MainActivity可以创建多个选项卡,每个片段一个选项卡。为此,您必须以逻辑方式分离代码。

另一方面,我不了解TheZooList课程的好处。例如,与SingleFragmentActivity相比,它似乎没有提供额外的好处。向读者解释Android框架似乎不错,但你用它做什么呢?这本书强迫你发挥创意。

这本书似乎向你展示了许多没有功能的代码。从像SlidingTabsBasic这样的Google示例项目开始。我已经实现了它。它有效,但定制它可能有点困难。但Android GUI框架并不容易。

祝你好运,玩得开心......

答案 2 :(得分:1)

我建议您使用Googles新设计库,这样可以非常轻松地实现标签。要将它包含在您的项目中,您只需在SDK管理器中下载最新的Android支持库,并将此行添加到build.gradle文件中的依赖项compile 'com.android.support:design:22.2.0'

从那里,您可以使用android.support.design.widget.TabLayout小部件轻松地为您的布局添加标签栏,然后使用其属性来查看/工作您想要的方式。

按照教程中的第3步,在TabLayout下方添加android.support.v4.view.ViewPager

按照步骤5创建自己的扩展FragmentPagerAdapter的适配器。在你的情况下,你将有2个片段,你的动物片段和植物片段。

完成所有这些操作后,将ViewPager链接到TabLayout就像这样简单:

    viewPager = (ViewPager) view.findViewById(R.id.view_pager);
    viewPager.setAdapter(new ViewPagerAdapter(getFragmentManager()));

    tabLayout = (TabLayout) getActivity().findViewById(R.id.tab_layout);
    tabLayout.setupWithViewPager(viewPager);

您只需获取ViewPager,将其适配器设置为您之前创建的适配器。然后将它们链接在一起,请致电tabLayout.setupWithViewPager(viewPager),您应该全部设定。

如果您需要更多信息,本教程可能会更深入地解释我要解释的内容。 http://blog.grafixartist.com/material-design-tabs-with-android-design-support-library/

如果你需要我详细说明,我很乐意。