Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 检查片段是否存在_Android_Android Fragments_Layout - Fatal编程技术网

Android 检查片段是否存在

Android 检查片段是否存在,android,android-fragments,layout,Android,Android Fragments,Layout,我正在关注关于Android多窗格开发的l 现在我想检查a细节片段是否存在(多窗格布局已激活),以删除它并使用新数据再次添加它。 当用户在主片段中选择某些内容时,我需要它来更新细节视图 正如教程中所建议的,我正在检查这样的片段: ReviewMaschineFragment fragment = (ReviewMaschineFragment) getFragmentManager(). findFragmentById(R.id.detailreviewco

我正在关注关于Android多窗格开发的l

现在我想检查a细节片段是否存在(多窗格布局已激活),以删除它并使用新数据再次添加它。 当用户在主片段中选择某些内容时,我需要它来更新细节视图

正如教程中所建议的,我正在检查这样的片段:

  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...");
        }
我的问题是,即使片段存在,它也总是会变为false。 如果片段出现在多窗格布局中,为什么它没有检测到它的存在

我将这样的片段添加到布局中:

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>

请更改

ReviewMaschineFragment=(ReviewMaschineFragment)getFragmentManager()。

ReviewMaschineFragment=(ReviewMaschineFragment)getSupportFragmentManager()。
请更改

ReviewMaschineFragment=(ReviewMaschineFragment)getFragmentManager()。

ReviewMaschineFragment=(ReviewMaschineFragment)getSupportFragmentManager()。

在创建片段时使用它添加标记值 乙二醇

如果为null且片段不存在,则可以使用findFragmentByTag()函数获取片段

Fragment fragmentA = fragmentManager.findFragmentByTag("sometag");
if (fragmentA == null) {
  // not exist
} else {
  //fragment exist
}

例如:-

在创建片段时使用它添加标记值 乙二醇

如果为null且片段不存在,则可以使用findFragmentByTag()函数获取片段

Fragment fragmentA = fragmentManager.findFragmentByTag("sometag");
if (fragmentA == null) {
  // not exist
} else {
  //fragment exist
}

例如:-

我已将其更改为ReviewMaschineFragment=(ReviewMaschineFragment)getActivity().getSupportFragmentManager()(在片段内部调用),但代码仍希望始终启动以启动新活动,即使存在详细片段,如果调用片段,则应使用getChildFragmentManager()现在,我已将呼叫转移到活动中。ReviewMaschineFragment=(ReviewMaschineFragment)getSupportFragmentManager()。findFragmentById(R.id.detailreviewcontainer);仍然想在平板电脑上开始一项新的活动。如果我错了,请纠正我,但这是您首先建议的解决方案,对吗?因为findFragmentbyId可能返回一个片段数组。请尝试ft.add(R.id.detailreviewcontainer,new ReviewMaschineFragment(),“detailfragment”);并使用findFragmentByTag。我已将其更改为ReviewMaschineFragment=(ReviewMaschineFragment)getActivity().getSupportFragmentManager()(在片段内部调用)但是代码仍然希望始终启动以启动新活动,即使存在详细信息片段。如果您在片段中调用,您应该使用getChildFragmentManager(),现在我已将调用移动到活动中。ReviewMaschineFragment=(ReviewMaschineFragment)getSupportFragmentManager()。findFragmentById(R.id.detailreviewcontainer);仍然想在平板电脑上开始一项新的活动。如果我错了,请纠正我,但这是您首先建议的解决方案,对吗?因为findFragmentbyId可能返回一个片段数组。请尝试ft.add(R.id.detailreviewcontainer,new ReviewMaschineFragment(),“detailfragment”);并使用findFragmentByTag.Try fragment.isVisible()支持v4片段Try fragment.isVisible()支持v4片段