检查片段是否存在

时间:2016-06-02 10:01:48

标签: android android-fragments layout

我正在关注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>

2 个答案:

答案 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().