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