我的活动在单个XML布局中声明其所有GUI片段。它只需要在发布时显示一些片段;当用户与应用程序交互时,其余部分会显示。布局的一部分如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/map_panel"
android:name="com.example.MapPanel"
android:layout_width="match_parent"
android:layout_height="@dimen/map_panel_height" />
<fragment
android:id="@+id/list_panel"
android:name="com.example.ListPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/map_panel" />
<fragment
android:id="@+id/detail_panel"
android:name="com.example.DetailPanel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/map_panel"
android:visibility="gone" />
我的意图是list_panel
片段在启动时可见,detail_panel
片段被隐藏,直到用户从列表中选择某些内容。
默认情况下,片段以isHidden
属性为假开始。这意味着我的活动必须迭代加载的片段,并在启动时手动调用isHidden(true)
等片段上的detail_panel
。
我更愿意在XML布局中声明isHidden
状态。但是,在android:visibility="gone"
声明中设置<fragment>
不会更改isHidden
状态,而且我找不到任何其他属性的文档可以解决问题。
是否可以在<fragment>
上设置XML属性以使其隐藏?
注意:我不关心视图可见性,我关注fragment.isHidden()
值。这会影响FragmentManager如何操纵后台堆栈并执行动画。如果在视图不可见或已消失的片段上调用transaction.show(fragment)
,但fragment.isHidden()
值为false,则FragmentManager不会使视图可见。请参阅http://developer.android.com/reference/android/app/Fragment.html#isHidden()以供参考。
答案 0 :(得分:10)
我遇到了类似的情况,我不得不隐藏片段。
我只是将片段包含在LinearLayout中,并将布局标记为可见/消失。
<LinearLayout
android:id="@+id/map_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="visible" >
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" />
</LinearLayout>
答案 1 :(得分:6)
根据Jyo的帖子,使用:
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.hide(mFragment);
fragmentTransaction.commit();
这在API级别23上对我有用。mFragment
是您要隐藏的片段。
答案 2 :(得分:0)
这个答案有点晚,以为它可能对将来的参考有所帮助。可见性是View类的一部分 - 虽然无法访问可见性值,但Fragment扩展了对象。一种可能性是使Fragment成为FrameLayout的子元素并调用不可见或者在布局上消失。这将导致片段看起来被隐藏。
希望它有所帮助!
答案 3 :(得分:0)
public void showHideFrgament(final Fragment fragment){
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(android.R.animator.fade_in,
android.R.animator.fade_out);
if (fragment.isHidden()) {
ft.show(fragment);
Log.d("hidden","Show");
} else {
ft.hide(fragment);
Log.d("Shown","Hide");
}
ft.commit();
}
答案 4 :(得分:-1)
我们有片段的isVisible方法 将可见性设置为Gone不会占用任何空间 而Invisible占用了实际的视图空间。