0

我試圖將標題儘可能地短語,但基本上在HomeActivity內部,我有一個用於片段的自定義菜單。其中之一是HomeFragment其中包含Tablelayout的2個選項卡與viewpager ..!從工具欄按下後,Viewpager將無法正常工作

一切工作正常。但在菜單片段中,當用戶單擊工具欄上的後退按鈕時,將返回到HomeFragment。 一個片段替換方法將做的伎倆,我已經用它來代替之間的片段從菜單中選擇!

但是在這種情況下,HomeFragment尚未打開Tablayout未響應!感覺就像片段沒有正確創建!?

我嘗試使用默認情況下打開HomeFragment的同一活動的新意圖,並打開它,但具有相同的問題。


的問題

enter image description here


守則

HomeFragment

// code.. 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_home, container, false); 
    InitViews(rootView); 

    TabLayoutAdapter adapter = new TabLayoutAdapter(getFragmentManager()); 
    pager.setAdapter(adapter); 
    tabLayout.setupWithViewPager(pager); 


    return rootView; 
    } 

// code.. 

菜單片段

// code.. 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.to_home: 

    replaceFragment(new HomeFragment()); 

     // tried this and it's the same problem 
     // startActivity(new Intent(getActivity(), HomeActivity.class).setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)); 
     return true; 
     default: 
     return super.onOptionsItemSelected(item); 
    } 
    } 

    public void replaceFragment(Fragment fragment) { 
    android.support.v4.app.FragmentTransaction t = getFragmentManager().beginTransaction(); 
    t.replace(R.id.Container, fragment); 
    t.commit(); 
    } 

    // code.. 

回答

2

看着我認爲你必須使用getChildFragmentManager(代碼),而不是getFragmentManager(),並將其用於片段事務。

getChildFragmentManager()的定義是: 返回一個專用的FragmentManager,用於放置和管理這個Fragment中的Fragments。

getFragmentManager()的定義是: 返回FragmentManager以與與此片段的活動關聯的片段進行交互。

更換由getChildFragmentManager有getFragmentManager()()這行代碼

TabLayoutAdapter adapter = new TabLayoutAdapter(getChildFragmentManager()); 

另外在菜單片段

android.support.v4.app.FragmentTransaction t = getChildFragmentManager().beginTransaction(); 
+0

它給我'java.lang.IllegalArgumentException異常:未找到ID視圖0x7f0d008a(XXX.XXXX:id /容器)的片段GamesFragment {2b77c84#2 id = 0x7f0d008a}' –

+0

GamesFragment在哪裏? – Anonymous

+0

這是菜單片段..!它的代碼張貼在問題中!你爲什麼認爲這個錯誤顯示。 –