尝试在空对象引用上调用虚方法'void android.app.Activity.setTitle(int)'

时间:2016-12-19 00:03:28

标签: android android-fragments

美好的一天,

当app在平板电脑上运行时,我在标题中说出了问题。我在布局中显示的意图是向右显示,第一次用户进入应用程序时空框架布局,因此不显示任何内容。到目前为止一切都很好。

然后,用户单击左窗格中列表视图的项目,因此其详细信息显示在右窗格中。这在下面的Activity中的侦听器中很好地捕获了触发else部分,并尝试以编程方式添加FragmentDetail,它具有相应的布局。

@Override
public void onItemSelected(Uri wifi)
{
    mWifi = wifi;
    if (wifi != null)
    {
        if (!mDualFragments)
        {
            Intent intent = new Intent(this, DetailActivity.class);
            intent.setData(wifi);
            startActivity(intent);
        }
        else
        {
            // add fragment programmatically to the framelayout
            FragmentDetail fd = new FragmentDetail();
            getFragmentManager()
                    .beginTransaction()
                    .add(R.id.mFragment_detail, fd)
                    .commit();
            fd.updateFragmentDetail(wifi, true);
        }
    }
}

然后,调用FragmentDetail中的以下方法,并在setTitle getActivity()中发生错误。看起来错误发生在调用者活动的FragmentTransaction中。

    public void updateFragmentDetail(Uri wifi, boolean dualFragments)
    {
    mCurrentWifiUri = wifi;
    mDualFragments = dualFragments;
    if (mCurrentWifiUri != null)
    {
        getActivity().setTitle(R.string.title_editor_activity);
        if (!dualFragments)
        {
            getLoaderManager().initLoader(EXISTING_WIFI_LOADER, null, this);
        }
        else
        {
            getLoaderManager().restartLoader(EXISTING_WIFI_LOADER, null, this);
        }
    }
}

这是平板电脑的布局

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:baselineAligned="false"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="eu.javimar.wirelessvlc.MainActivity"
tools:showIn="@layout/activity_main">

<fragment
    android:id="@+id/mFragment_list"
    android:layout_weight="30"
    android:layout_width="0px"
    android:layout_height="match_parent"
    class="eu.javimar.wirelessvlc.view.FragmentList" />

<FrameLayout
    android:id="@+id/mFragment_detail"
    android:layout_weight="70"
    android:layout_width="0px"
    android:layout_height="match_parent">
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_gravity="center_vertical"
        android:layout_margin="16dp"
        android:textSize="25sp"
        android:text="Empty View, Click on a Wi-Fi" />
</FrameLayout>

谢谢!

更新 我很迷惑。这与你提到的@ gabe-sechan的NPE Q&amp; A有什么关系?我知道这是一个NPE问题,并且getActivity()正在创建它。但这仅仅是与FragmentTransactions,异步性相关的一个问题,并且它不会附加到Activity上,@ mike-m也会回答。也许我错过了什么?

0 个答案:

没有答案