平板电脑的不同片段视图

时间:2013-08-09 15:55:03

标签: android android-fragments

我使用Android向导创建了一个应用程序,并使用ViewPager来包含我的所有三个片段。主要活动包含在“activity_main.xml”中,并包含ViewPager,其中包含PagerTitleStrip。我的MainActivity扩展了FragmentActivity来自支持库。

我已经检查了Android开发者的Supporting Multiple Screens。我创建了一个名为“layout-sw600dp”的文件夹,并在其中添加了另一个“activity_main.xml”。我在LinearLayout里面添加了我的碎片。当我在7英寸平板电脑上运行时,我的应用程序部队会在此行{NP}关闭,mViewPager.setAdapter(mSectionsPagerAdapter);

我知道我在这里得到这个NPE是因为它从sw600dp文件夹调用我的xml,但是如何在平板电脑的单个视图中指定多个片段?

任何帮助或指示将不胜感激。

编辑 - 添加了一些源代码,尝试仅保留相关数据以保持帖子简短

如下所示,大多数代码都是由向导/ adt-plugin生成的。

布局/ activity_main.xml中

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

布局sw600dp / activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<fragment
    android:id="@+id/fragment_one"...
<fragment
    android:id="@+id/fragment_two"...

MainActivity.java

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Create the adapter that will return a fragment for each of the three primary sections
    // of the app.
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the action bar.
    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    // When swiping between different sections, select the corresponding tab.
    // We can also use ActionBar.Tab#select() to do this if we have a reference to the
    // Tab.
    mViewPager.setOnPageChangeListener(...

1 个答案:

答案 0 :(得分:1)

听起来在平板电脑上你不想要ViewPager,你只想显示所有片段,因此你没有在该布局中使用ViewPager。因此,当您尝试将mViewPager设置为null时,因为该布局中没有ViewPager。所以,如果我已经正确地看到了这种情况,你的选择是将平面ViewPager添加到平板电脑布局(不推荐),或者添加if语句。请记住,只要用户在平板电脑上,mViewPager就会设置为null,因此如果不在if语句中,您所涉及的任何代码都会抛出错误。

if(mViewPager!=null){
    mViewPager.setAdapter(mSectionsPagerAdapter)
}