2016-05-24 6 views
0

私は、Fragmentsの複雑な構造を持つアクティビティを持っています。アクティビティには、それぞれNavigationDrawerFragmentとMain Content Fragment(HomeTabFragment)の2つのコンテナがあります。 Main Content Fragmentには、2つの子フラグメント(SearchおよびNews)を含むTabLayout + ViewPager構造があります。メインコンテンツフラグメントを別のフラグメント(設定)に置き換える必要があるまで、これはうまくいきました。これもうまくいきましたが、同じMain Content Fragmentに戻るには、ViewPagerと子フラグメントが消えてしまいます。ViewPagerは含まれているフラグメントに戻った後に消滅します

これは構造です。 HomeTabFragmentは(LeftDrawerFragmentで)ボタンを経由してSettingsFragmentに置き換えられ、SettingsFragmentは再び(LeftDrawerFragment Inまたはハードウェアバックキー)ボタン

HomeActivity 
|-LeftDrawerFragment 
|-HomeTabFragment 
| |-ViewPager 
| |-HomeSearchFragment 
| |-HomeNewsFragment 
|-SettingsFragment 

ここHomeActivityレイアウトのヴィアHomeTabFragmentに置き換えられて -

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <!--<include layout="@layout/content_home"/>--> 
    <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <!--Toolbar--> 
     <android.support.design.widget.CoordinatorLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <android.support.design.widget.AppBarLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

       <android.support.v7.widget.Toolbar 
        android:id="@+id/toolbar" 
        android:layout_width="match_parent" 
        android:layout_height="?attr/actionBarSize" 
        android:layout_gravity="center_horizontal" 
        android:background="?attr/colorPrimary" 
        android:gravity="center_horizontal" 
        app:layout_scrollFlags="enterAlways" 
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
        app:subtitle="Your Medi-buddy" 
        app:title="@string/app_name"> 

        <ImageButton 
         android:layout_width="wrap_content" 
         android:layout_height="match_parent" 
         android:background="@null" 
         android:onClick="onHomeMenuClick" 
         android:padding="5dp" 
         android:src="@drawable/ic_menu_white" /> 

        <TextView 
         android:id="@+id/title" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:gravity="center" 
         android:text="@string/app_name" 
         android:textAppearance="@android:style/TextAppearance.Holo.Large" /> 
       </android.support.v7.widget.Toolbar> 
      </android.support.design.widget.AppBarLayout> 
      <!-- The main content view --> 
      <FrameLayout 
       android:id="@+id/tab_frag_container" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 

      </FrameLayout> 
     </android.support.design.widget.CoordinatorLayout> 
     <!-- The navigation drawer --> 
     <FrameLayout 
      android:id="@+id/left_drawer_container" 
      android:layout_width="240dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      android:background="#111" /> 
    </android.support.v4.widget.DrawerLayout> 
</android.support.design.widget.CoordinatorLayout> 

は、以下は私のHomeTabFragmentのレイアウトです

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginTop="?attr/actionBarSize" 
     android:orientation="vertical"> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 

      app:tabBackground="@android:color/white" 
      app:tabGravity="fill" 
      app:tabMode="fixed" 
      app:tabSelectedTextColor="@color/colorPrimaryDark" 
      app:tabTextColor="@color/colorPrimary" /> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/viewpager" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
    </LinearLayout> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@drawable/ic_search_white" /> 
</android.support.design.widget.CoordinatorLayout> 

これは私がHomeTabFragmentとSの間を行き来する方法ですettingsFragment

public void onLeftDrawerSettingsClick(View view) { 
     mDrawerLayout.closeDrawer(Gravity.LEFT); 
     getSupportFragmentManager().beginTransaction().replace(R.id.tab_frag_container, mApp.getFragmentController().getSettingsFragment()).addToBackStack("Drawer").commit(); 
    } 

    public void onLeftDrawerHomeClick(View view) { 
     mDrawerLayout.closeDrawer(Gravity.LEFT); 
     getSupportFragmentManager().beginTransaction().replace(R.id.tab_frag_container, mApp.getFragmentController().getHomeTabFragment()).commit(); 
    } 

私は、ViewPagerが置換トランザクションの影響を受ける理由を理解できません。 APIレベル15以下でChildフラグメントを許可しないことと関係があることがわかりましたが、これは最新のサポートライブラリで修正されていますが、問題ではないと思います。

他の機能に影響を与えずに、HomeTabFragmentをSettingsFragmentに置き換える方法はありますか?その逆もありますか?それとも私が間違っていることですか?

答えて

0

迅速な解決策は、2回目の読み込み時にフラグメントの完全なビューを作成しないことでした。そのためのソリューションが動作するけど、私はonCreateView()

if (mParent != null) 
    return mParent; 
// Inflate the layout for this fragment 
mParent = inflater.inflate(R.layout.fragment_home_tab, container, false); 

HomeTabFragmentの中で次のコードを入れて、私はまだ、なぜそれが起こっている説明することができませんか。誰かが解決策を探している場合に備えて、それを回答として掲示する。可能であれば、より良い解答を提供してください。

関連する問題