我正在关注Android中的多窗格开发vogella tutoria l。
现在我想检查细节片段是否存在(激活多窗格布局)以将其删除并再次使用新数据添加它。 当用户选择主片段中的某些内容时,我需要更新详细视图。
正如教程中所建议的那样,我正在检查Fragment:
ReviewMaschineFragment fragment = (ReviewMaschineFragment) getFragmentManager().
findFragmentById(R.id.detailreviewcontainer);
if (fragment == null || ! fragment.isInLayout()) {
Log.i("Detail Fragment", "Start new activity");
}
else {
Log.i("Detail Fragment", "Update...");
}
我的问题是,即使片段存在,它总是会变错。 如果片段存在于多窗格布局中,为什么不将片段检测为已存在?
我将这样的片段添加到布局中:
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar_main);
setSupportActionBar(toolbar);
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.maschinelistcontainer, new MaschineFragment());
if(getResources().getBoolean(R.bool.dual_pane)){
ft.add(R.id.detailreviewcontainer, new ReviewMaschineFragment());
}
ft.commit();
平板电脑布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<include
android:id="@+id/toolbar_main"
layout="@layout/toolbar"
></include>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="9"
android:orientation="horizontal" >
<FrameLayout
android:id="@+id/maschinelistcontainer"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
/>
<FrameLayout
android:id="@+id/detailreviewcontainer"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="6"
/>
</LinearLayout>
</LinearLayout>
答案 0 :(得分:2)
使用它创建片段添加标记值 例如
ft.add(R.id.maschinelistcontainer, new MaschineFragment(), "sometag");
如果片段不存在则可以使用findFragmentByTag()函数来获取片段。
Fragment fragmentA = fragmentManager.findFragmentByTag("sometag");
if (fragmentA == null) {
//not exist
}
else{
//fragment exist
}
例如: - http://wiki.workassis.com/android-load-two-fragments-in-one-framelayout/
答案 1 :(得分:0)
请更改
ReviewMaschineFragment fragment = (ReviewMaschineFragment) getFragmentManager().
到
ReviewMaschineFragment fragment = (ReviewMaschineFragment) getSupportFragmentManager().