它是如何运作的?我的布局如下:
<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
是否正确,因为我在文档中找不到任何关于它的信息。
答案 0 :(得分:7)
根据Fragment source,isVisible
定义为:
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)未隐藏。
也许你还没有添加片段?从我无法分辨的代码。希望这会有所帮助。