2013-05-09 32 views
8

Cách hoạt động? Tôi có bố cục như sau:Mảnh vỡ android: hiển thị ở định nghĩa bố cục 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> 

Lưu ý đoạn thứ hai có android:visibility="gone" và thực sự nó không hiển thị trên màn hình. Nhưng mã này:

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

trả về true, điều này không được tôi mong đợi. Tôi tự hỏi nếu sử dụng android:visibility là nguyên nhân chính xác, tôi không thể tìm thấy bất kỳ thông tin nào về nó trong tài liệu.

+0

Bạn đang khởi tạo (nhận được tham chiếu đến) 'firstFrag' và 'secondFrag' chính xác? – zbr

+0

Có, tôi được tham chiếu bởi 'getFragmentById()'. – Michal

+0

Như trong 'firstFrag = getFragmentManager(). FindFragmentById (R.id.search_form_fragment);' và 'secondFrag = setFragmentManager(). FindFragmentById (R.id.result_list_fragment);'? – zbr

Trả lời

6

mỗi sự Fragment source, isVisible được định nghĩa là:

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

Ie, nó được gắn liền với hoạt động này, nó không phải là ẩn (thông qua FragmentTransaction.hide), quan điểm được bơm căng, quan điểm được gắn vào một cửa sổ và chế độ xem nội thất của FragmentView.VISIBLE.

Tôi tin rằng vấn đề là để thổi phồng mảnh của bạn, hệ thống sẽ tạo bố cục để giữ chế độ xem Fragment. Đó là chế độ xem mà bạn đang đặt thành View.GONE, không phải chế độ xem nội bộ mà Fragment tạo ra.

tôi có thể đề nghị thay đổi tình trạng của bạn là:

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

tôi đã cố gắng làm điều này

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())); 

Và đăng nhập của tôi là:

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

Từ android documentation, isVisible() Return đúng nếu phân đoạn hiện được hiển thị cho người dùng. Điều này có nghĩa là: (1) đã được thêm vào, (2) có khung nhìn của nó gắn liền với cửa sổ, và (3) không bị ẩn.

Có thể bạn chưa thêm phân đoạn chưa? từ mã tôi không thể nói. Hi vọng điêu nay co ich.

+2

Ok, nhưng bạn thêm phân đoạn theo chương trình. Tôi đã tự hỏi làm thế nào android: khả năng hiển thị hoạt động trên thẻ trong xml. – Michal

+0

Sau đó, tôi nghĩ rằng ianhanniballake câu trả lời là những gì bạn đang tìm kiếm. –

Các vấn đề liên quan