0

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

我已经检查了Android Developers 上的Supporting Multiple Screens 。我创建了一个名为“layout-sw600dp”的文件夹,并在其中添加了另一个“activity_main.xml”。我在其中添加了我的片段LinearLayout。当我在 7 英寸平板电脑上运行此程序时,我的应用程序强制在此行以 NPE 关闭,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(...
4

1 回答 1

1

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

if(mViewPager!=null){
    mViewPager.setAdapter(mSectionsPagerAdapter)
}
于 2013-08-09T16:06:12.593 回答