0

这是过去一天一直困扰着我的事情。所以我不断得到一个对 mTab​​Host 的空指针引用,mTabHost 是 onCreate() 中的一个变量。这是相关的代码:

从我的主要活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instance = this;
    setContentView(R.layout.second_activity);

    // Initializing ViewPager and TabHost objects:
    mViewPager = new ViewPager(this);
    mViewPager.setId(R.id.viewpager);
    setContentView(mViewPager);
    mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
    mTabHost.setup(this,getSupportFragmentManager());

}

这是 second_activity.xml:

<?xml version="1.0" encoding="UTF-8"?>

<android.support.v4.app.FragmentTabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="bottom">

        <fragment android:name="com.yolostudios.dots.main.login.LoginFragment"
            android:id="@+id/login_fragment"
            android:layout_weight="2"
            android:layout_width="match_parent"
            android:layout_height="0dip"
            android:visibility="gone"/>

        <TabWidget
            android:id="@android:id/tabs"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0"/>

        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="8" >

            <include
                android:layout_width="fill_parent"
                android:layout_height="60dip"
                android:visibility="invisible"
                android:layout_gravity="bottom"
                android:focusable="true"
                layout="@layout/createspotbutton" />

        </android.support.v4.view.ViewPager>

        <!-- Loading header of this UI which is coded separately -->

        <FrameLayout
            android:id="@+id/toolbar_container"
            android:layout_width="match_parent"
            android:layout_height="50dp" >

            <include
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:padding="20dp"
                layout="@layout/toolbar" />

        </FrameLayout>

    </LinearLayout>

</android.support.v4.app.FragmentTabHost>

当我运行 mTab​​Host.setup(this,getSupportFragmentManager()) 时抛出实际异常,因为 mTab​​Host 为空。

我注意到的一些奇怪的事情是,即使是 Support4Demos 中给出的示例 FragmentTabs 也不适合我。我很确定这告诉我我的 android-support-v4.jar 或我的环境有问题,但我尝试重新下载 jar 并重新编译,但仍然没有任何效果:尽管编译正常,但我的项目和示例项目在运行时失败。至于其他可能的环境问题,我不确定它们可能是什么。

任何建议,将不胜感激。

谢谢,安德鲁。

4

3 回答 3

0

我不确定情况是否如此。但是在使用时请记住以下信息Fragment/FragmentHost/FragmentActivity

Activity如果您使用的是 android.app.Fragment,请记住使用;FragmentActivity如果您正在使用,请使用android.support.v4.app.Fragment. 切勿将 aandroid.support.v4.app.Fragment或附加FragmentHost到 a android.app.Activity,因为这会导致 aException被抛出。

于 2013-07-23T04:39:16.297 回答
0

尝试

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    instance = this;
    setContentView(R.layout.second_activity);
    mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
    mTabHost.setup(this,getSupportFragmentManager());

    // Initializing ViewPager and TabHost objects:
    mViewPager = new ViewPager(this);
    mViewPager.setId(R.id.viewpager);
    setContentView(mViewPager);


}
于 2013-07-23T04:11:29.813 回答
0

也许如果您将其更改为:

setContentView(R.layout.second_activity);
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);

// Initializing ViewPager and TabHost objects:
mViewPager = new ViewPager(this);
mViewPager.setId(R.id.viewpager);
setContentView(mViewPager);
mTabHost.setup(this,getSupportFragmentManager());

}

由于您在找到第一个布局文件中的对象之前使用不同的布局调用 setContentView 吗?

于 2013-07-23T04:35:32.197 回答