2013-11-15 16 views
11

Hoạt động của tôi khai báo tất cả các mảnh GUI của nó trong một bố cục XML đơn. Nó chỉ cần hiển thị một vài đoạn trong lúc khởi động; phần còn lại được hiển thị khi người dùng tương tác với ứng dụng. Một phần của cách bố trí như sau:Làm cách nào để khai báo một Phân đoạn là bị ẩn trong bố cục XML

<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" /> 

ý định của tôi là list_panel đoạn có thể nhìn thấy lúc khởi động, và detail_panel đoạn được ẩn cho đến khi người sử dụng chọn một cái gì đó từ danh sách.

Theo mặc định, một đoạn bắt đầu với thuộc tính isHidden là sai. Điều đó có nghĩa là hoạt động của tôi phải lặp qua các đoạn đã tải và gọi theo cách thủ công isHidden(true) trên các đoạn như detail_panel khi khởi động.

Tôi muốn khai báo trạng thái isHidden trong bố cục XML. Tuy nhiên, đặt android:visibility="gone" trong tuyên bố <fragment> không thay đổi trạng thái isHidden và tôi không thể tìm thấy bất kỳ tài liệu nào về thuộc tính khác sẽ thực hiện thủ thuật.

Có thể đặt thuộc tính XML trên <fragment> để khiến thuộc tính bị ẩn không?

Lưu ý: Tôi không quan tâm đến khả năng hiển thị chế độ xem, tôi quan tâm đến giá trị fragment.isHidden(). Điều đó ảnh hưởng đến cách FragmentManager thao tác ngăn xếp lưng và thực hiện hoạt ảnh. Nếu bạn gọi transaction.show(fragment) trên một đoạn có chế độ xem là vô hình hoặc bị mất, nhưng giá trị fragment.isHidden() là sai, thì Trình quản lý phân đoạn sẽ không hiển thị chế độ xem. Xem http://developer.android.com/reference/android/app/Fragment.html#isHidden() để tham khảo.

+0

bạn đã thử android: visibility = "invisible" chưa? – Sushil

+0

Có, tôi đã thử "vô hình" ngoài "biến mất". Không ảnh hưởng đến trạng thái isHidden của fragment. –

+0

Bạn có ý nghĩa gì khi "bỏ rơi để đi". bạn đã thử "vô hình" chưa. Trong trường hợp này nó sẽ tạo ra fragmment và giữ nó trong trạng thái vô hình. – Sushil

Trả lời

-1

chúng tôi có phương pháp isisible cho fragment viseeting seeting to Gone không mất bất kỳ không gian Trường hợp như Invisble có không gian xem thực tế.

+0

Bạn đang mô tả trạng thái của Chế độ xem, không phải trạng thái 'isHidden' của đoạn. –

2

Câu trả lời này là một chút muộn nghĩ rằng nó có thể hữu ích để tham khảo trong tương lai. Khả năng hiển thị là một phần của lớp Chế độ xem - Phân đoạn mở rộng đối tượng mặc dù không có quyền truy cập vào các giá trị hiển thị. Một khả năng là làm cho Fragment là một đứa trẻ của FrameLayout và gọi vô hình hoặc đi trên layout. Điều này sẽ làm cho đoạn dường như bị ẩn.

Hy vọng điều đó sẽ hữu ích!

+0

Thay đổi trạng thái 'mức hiển thị 'của Chế độ xem không ảnh hưởng đến trạng thái' isHidden' của Phân đoạn. –

+1

gói 'phân đoạn' xung quanh một 'FrameLayout' là IMHO đơn giản và hiệu quả nhất – noloman

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

Tôi phải đối mặt với tình huống tương tự, nơi tôi phải ẩn một đoạn.

Tôi chỉ cần đưa đoạn vào bên trong LinearLayout và đánh dấu bố cục để hiển thị/biến mất.

<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> 
3

Dựa tắt bài Jyo, sử này:

FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.hide(mFragment); 
    fragmentTransaction.commit(); 

này đã làm việc cho tôi trên API Cấp 23. 'mFragment' là đoạn mà bạn muốn ẩn.

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