美好的一天,
当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也会回答。也许我错过了什么?