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

时间:2013-05-09 16:46:30

标签: android android-layout android-fragments

它是如何运作的?我的布局如下:

<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是否正确,因为我在文档中找不到任何关于它的信息。

2 个答案:

答案 0 :(得分:7)

根据Fragment sourceisVisible定义为:

 final public boolean isVisible() {
    return isAdded() && !isHidden() && mView != null
            && mView.getWindowToken() != null && 
               mView.getVisibility() == View.VISIBLE;
}

即它附加到活动,它不被隐藏(通过FragmentTransaction.hide),视图被充气,视图被附加到窗口,而片段的内部视图< / strong>是View.VISIBLE

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

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

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

答案 1 :(得分:0)

我试过这个

XML

<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lateral_login_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone"/>

代码

LoginFrag = LoginFragment.newIstance();     
FragmentTransaction LoginTransaction = fm.beginTransaction();
LoginTransaction.replace(R.id.lateral_login_frame, LoginFrag);
LoginTransaction.commit();

Log.d("visibility", String.valueOf(LoginFrag.isVisible()));

我的日志是:

05-09 19:07:54.236: D/visibility(3483): false

来自android documentation,isVisible()如果片段当前对用户可见,则返回true。这意味着:(1)已添加,(2)其视图附加到窗口,(3)未隐藏。

也许你还没有添加片段?从我无法分辨的代码。希望这会有所帮助。