片段android:xml布局定义中的可见性

它是如何工作的?我有如下布局:
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <fragment
        android:id="@+id/search_form_fragment"
        android:name="FragmentClass"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <fragment
        android:id="@+id/result_list_fragment"
        android:name="FragmentClass"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />
</LinearLayout>

注意第二个片段有android:visibility =“gone”,实际上它在屏幕上不可见.但是这段代码

boolean bothVisible = firstFrag.isVisible() && secondFrag.isVisible();

返回true,这是我没想到的.我想知道是否使用android:visibility是正确的,因为我在文档中找不到任何关于它的信息.

解决方法

根据 Fragment source,isVisible定义为:
final public boolean isVisible() {
    return isAdded() && !isHidden() && mView != null
            && mView.getwindowToken() != null && 
               mView.getVisibility() == View.VISIBLE;
}

即,它被附加到活动,它不被隐藏(通过FragmentTransaction.hide),视图被膨胀,视图被附加到窗口,并且片段的内部视图是View.VISIBLE.

我认为问题在于,为了给你的片段充气,系统会创建一个布局来保存片段的视图.您正在设置View.GONE,而不是Fragment创建的内部视图.

我可能会建议你改变你的状况:

findViewById(R.id.result_list_fragment).getVisibility() == View.VISIBLE

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...