5

Tôi có một FragmentTabHost trong bố cục của một trong các đoạn của tôi (hãy gọi nó là parentFragment). Bây giờ, tôi khởi tạo từng mảnh vỡ trong tabhost lập trình trong onCreateView của parentFragment. Khi parentFragment được tạo ra, mọi thứ dường như hoạt động tốt và nó hiển thị đoạn của tab đầu tiên một cách chính xác.Các mảnh vỡ không hiển thị sau khi chuyển đổi tab trong lồng nhau FragmentTabHost

Nhưng ngay sau khi tôi chuyển tab một lần, các đoạn biến mất (tôi có thể thấy màu nền của tabhost, nhưng không có nội dung của tabcontent-container). Ngoài ra đoạn đầu tiên đã biến mất khi tôi chuyển về nó. Các mảnh được thực sự được tạo ra như đăng nhập của tôi cho thấy, nhưng họ không nhìn thấy được.

Tôi cho rằng nó phải liên quan đến việc tạo lại các mảnh, vì tôi cũng đã thử sử dụng một ViewPager với một FragmentPagerAdapter. Ở đó tôi có thể vui vẻ chuyển đổi giữa hai mảnh đầu tiên (được cài đặt sẵn do setOffscreenPageLimit() == 1), nhưng các mảnh (lại) được tạo ra ngoài đó cũng trống.

Có ai nghĩ gì không ??

Dưới đây là một số mã của tôi:

Extract của XML parentFragment của:

... 
      <android.support.v4.app.FragmentTabHost 
       android:id="@android:id/tabhost" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" > 

       <RelativeLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" > 

        <TabWidget 
         android:id="@android:id/tabs" 
         android:layout_width="match_parent" 
         android:layout_height="40dp" 
         android:layout_alignParentTop="true" /> 

        <FrameLayout 
         android:id="@android:id/tabcontent" 
         android:layout_width="0dp" 
         android:layout_height="0dp" /> 

        <FrameLayout 
         android:id="@+id/realtabcontent" 
         android:layout_below="@android:id/tabs" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" /> 
       </RelativeLayout> 
      </android.support.v4.app.FragmentTabHost> 
... 

Extract của XML parentFragment của:

... 
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Log.d(TAG, "onCreateView"); 
     ViewGroup layoutContainer = (ViewGroup) inflater.inflate(R.layout.fragment_app_details_test, container, false); 

      tabHost = (FragmentTabHost) layoutContainer.findViewById(android.R.id.tabhost); 
     tabHost.setup(getActivity(), getChildFragmentManager(), R.id.realtabcontent); 
     tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("TAB1"), 
       FragmentSubTab1.class, null); 
     tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("TAB2"), 
       FragmentSubTab2.class, null); 
     tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("TAB3"), 
       FragmentSubTab3.class, null); 

     return layoutContainer; 
    } 
... 

Simple lạm phát bố trí trong tab phụ của đoạn:

... 
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     ViewGroup layoutContainer = (ViewGroup) inflater.inflate(R.layout.subfragment1, container, 
       false); 

     initUi(layoutContainer); 
     return layoutContainer; 
    } 
... 
+0

Vì vậy, các mảnh vỡ sẽ bị ẩn khi tiêu điểm thay đổi? – jsmith

+0

Chỉ ra rằng một ViewGroup tùy chỉnh xung quanh đã gây ra vấn đề này do cách nó xử lý onLayout và onMeasure. – Till

+1

@Till Bạn đã giải quyết được vấn đề này chưa? Nhận được cùng một vấn đề ngay bây giờ. http://stackoverflow.com/questions/17009462/fragmenttabhost-on-tab-change-the-fragments-get-destroyed-and-disappear –

Trả lời

1

tôi đã không xử lý FragmentTabHost trước nhưng tôi muốn khuyên bạn sử dụng phương pháp setNavigationMode Action Bar (ActionBar.NAVIGATION_MODE_TABS) để đạt được điều hướng tab trong ứng dụng của bạn (Doc đây: http://developer.android.com/guide/topics/ui/actionbar.html#Tabs) phương pháp đề xuất này dường như ít hoạt động hơn và sử dụng ít người giữ mảnh hơn. Về cơ bản, bạn thể hiện các tab của mình, thêm chúng vào hậu trường và hiển thị/ẩn chúng theo tab đã chọn thông qua phương thức onTabSelected hoặc onTabUnselected.

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

+0

Tôi đồng ý. Nhưng không may, tôi phải sử dụng một TabHost do thiết kế/bố cục được yêu cầu ... – Till

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