2017-03-18 41 views
0

工作我創建一個標籤式佈局導覽活動的家庭片段,再次調用的Tablayout片段不在抽屜式導航

,所以我叫名爲「測試」作爲默認的主要活動片段。像

 test home_fragment=new test(); 
     android.support.v4.app.FragmentManager manager=getSupportFragmentManager(); 
     manager.beginTransaction().replace(R.id.layout, home_fragment,home_fragment.getTag()).commit(); 

如果我再次調用這個片段。像

if (id == R.id.nav_home) { 


     test home_fragment=new test(); 
     android.support.v4.app.FragmentManager manager=getSupportFragmentManager(); 
     manager.beginTransaction().replace(R.id.layout, home_fragment,home_fragment.getTag()).commit(); 


    } 

現在的結果是TAB1和TAB2都不見了

見截圖更多的參考

When opening or calling for the first time When opening or calling for the second time time

這是我的測試類(標籤式佈局)

package com.hackerinside.jaisonjoseph.testapp; 


import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import static android.R.attr.x; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class test extends Fragment { 




public SectionsPagerAdapter mSectionsPagerAdapter; 
public ViewPager mViewPager; 





public test() { 


} 



@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 


    View rootView = inflater.inflate(R.layout.fragment_test, container, false); 
    // View x = inflater.inflate(R.layout.fragment_test,null); 
    mSectionsPagerAdapter = new SectionsPagerAdapter (getFragmentManager()); 
    mViewPager = (ViewPager) rootView.findViewById(R.id.container); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 
    TabLayout tabLayout = (TabLayout) rootView.findViewById(R.id.tabs); 
    //Adding the tabs using addTab() method 
    tabLayout.addTab(tabLayout.newTab().setText("Tab Title 1")); 
    tabLayout.addTab(tabLayout.newTab().setText("Tab Title 2")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    tabLayout.setupWithViewPager(mViewPager); 

    return rootView; 

} 

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

    private SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 


     switch (position) 
     { 
      case 0: 

       tab1 tab1=new tab1(); 

       return tab1; 
      case 1: 

       tab2 tab2=new tab2(); 

       return tab2; 


      default:return null; 
     } 



    } 

    @Override 
    public int getCount() { 
     // Show 3 total pages. 
     return 2; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "SECTION 1"; 
      case 1: 
       return "SECTION 2"; 

     } 
     return null; 
    } 
} 



} 

這是我的選項卡式佈局的XML代碼

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout 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:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.hackerinside.jaisonjoseph.testapp.MainActivity" 
    android:orientation="vertical"> 

    <android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 


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

    </android.support.design.widget.AppBarLayout> 

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


    </LinearLayout> 

回答

1

試試這兩個解析:

解決方案1 ​​

,而不是

public class SectionsPagerAdapter extends FragmentPagerAdapter { 

使用

public class SectionsPagerAdapter extends FragmentStatePagerAdapter { 

解決方案2

使用getChildFragmentManager()代替getFragmentManager()

mSectionsPagerAdapter = new SectionsPagerAdapter (getChildFragmentManager()); 
+0

這是最好的辦法嗎? –

+0

兄弟,我想你的方式我做編程,我不知道多少,但我想做更多像你一樣,所以建議我成爲一個像你這樣的好開發者的方式,謝謝 –

+0

我更喜歡第一種方式...成爲一名優秀的開發人員...我會說繼續練習代碼(Android),並閱讀不同的代碼示例和他們的工作過程..我也會建議你閱讀官方的Android開發人員文檔,這可以幫助我在方式.. – rafsanahmad007