2016-02-19 48 views
1

我正在製作一個具有幾個屏幕的應用程序,並且必須可以使用後退按鈕瀏覽應用程序。Android:後退堆棧無法正常工作

我有一個屏幕,我的MainFragment的麻煩。似乎沒有認識到後臺。

的MainFragment就是從這裏在MainActivity開始:

if (savedInstanceState == null) { 
     getFragmentManager().beginTransaction().replace(R.id.container, new MainFragment()).addToBackStack("mainFragment") 
       .commit(); 
    } 

因此,應用程序啓動時,這個片段被加載。 從這個mainFragment我可以導航到不同的屏幕。 我在mainActivity方法,我在我的MainFragment調用瀏覽:

public void navigateToListCountriesSeen(){ 
    getFragmentManager().beginTransaction().replace(R.id.container, new listCountriesSeenFragment()).addToBackStack("listSeen") 
      .commit(); 
} 

public void navigateToListCountriesToSee(){ 
    getFragmentManager().beginTransaction().replace(R.id.container, new listCountriesToSeeFragment()).addToBackStack("listToSee") 
      .commit(); 
} 

但每當我在countriesSeen或CountriesToSee片段/屏幕和我按下返回鍵,應用程序只是關閉...

我該如何解決?

+0

嘗試在空檢查中調用'.add()'而不是'replace()'作爲第一個片段,並使用'addToBackStack(null)'。 – EpicPandaForce

回答

0

使用addToBackStack()如果你想在退格鍵導航到備份。下面是一個例子:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
ListCountriesSeenFragment listCountriesSeenFragment = new ListCountriesSeenFragment(); 
fragmentTransaction.replace(R.id.frameLayout, listCountriesSeenFragment, FRAGMENT_TAG_COUNTRIES_SEEN); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 
+0

但我使用addToBackStack? 在我的代碼段中向右滾動 – FerialTeut

+0

對不起,你說得對,我沒有看到它們。你正在爲你的活動延期哪一堂課?我在上面的代碼中使用了'getSupportFragmentManager()',因爲我擴展了'AppCompatActivity'。 – NightSkyDev

+0

我也在擴展AppCombatActivity,getSupportFragmentManager和getFragmentManager有區別嗎? – FerialTeut

0

一個可行的辦法是檢查片段onBackPressed:

public void onBackPressed() { 

    Fragment currentFragment =getFragmentManager().findFragmentById(R.id.ll_fragment_container); 

    if(currentFragment instanceof CountriesToSee && currentFragment.isVisible()){ //if fragment for info is showing close fragment when back pressed. Otherwise close app 
     removeFragment(currentFragment); 

    }else{ 
     super.onBackPressed(); 
    } 

} 
+0

這看起來很棒!我如何編寫removeFragment方法? – FerialTeut

+0

public void onBackPressed(){ Fragment currentFragment = getFragmentManager()。findFragmentByTag(「listSeen」); if(currentFragment instanceof listCountriesSeenFragment && currentFragment.isVisible()){//如果信息的片段在按下時顯示接近片段。否則關閉應用程序 getFragmentManager()。beginTransaction()。remove(currentFragment).commit();其他{ } } } 我試過這個,但是那裏什麼都沒有? Mainfragment沒有出現? – FerialTeut

+0

如果你想用MainFragment替換listCountriesSeenFragment,你可以使用fragmenttransaction.replace(R.id.fragment_container,newFragment); – Jaz