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