2012-06-08 53 views
0

我想要獲取活動中加載的碎片的後備堆棧計數。這裏的想法是,如果getBackStackEntryCount返回'0',運行我的onexitCheck()方法磨損/要求用戶退出或沒有,但我在第70行得到getBackStackEntryCount()的NPE。Android上的NPE BackStackEntry onBackPressed

我弄不清楚我有什麼問題。請看看我的方法,並在答案中添加更正。日Thnx。

public class RegulatoryDiscription extends Fragment { 
. . . 
} 
. . . 
//THE NPE STARTS HERE--> 
    FragmentManager.BackStackEntry backEntry = getFragmentManager().getBackStackEntryAt(getActivity().getFragmentManager().getBackStackEntryCount()); 
    int bs = backEntry.getId(); 

    public void onBackPressed() { 
     if (bs == 0) { 
      onexitCheck(); 
     } 
    } 

    private Toast toast; 
    private long lastBackPressTime = 0; 

    public void onexitCheck() { 
     if (this.lastBackPressTime < System.currentTimeMillis() - 4000) { 
      toast = Toast.makeText(getActivity(), "Press back again to close this app", 4000); 
      toast.setDuration(4000); 
      toast.show(); 
      this.lastBackPressTime = System.currentTimeMillis(); 
     } else { 
      if (toast != null) { 
       toast.cancel(); 
      } 
      super.getActivity().onBackPressed(); 
     } 
    } 
+1

NPE可能是backEntry.getId(),因爲backEntry爲空 – antlersoft

回答

0

我要去猜測,這個:

FragmentManager.BackStackEntry backEntry = getFragmentManager().getBackStackEntryAt(
     getActivity().getFragmentManager().getBackStackEntryCount()); 

應該成爲這樣的:由於計爲一個條目,2兩個條目,等返回1

FragmentManager.BackStackEntry backEntry = getFragmentManager().getBackStackEntryAt(
     getActivity().getFragmentManager().getBackStackEntryCount() - 1); 

;但入口的索引從0開始。

+0

對不起,沒有變化 - 相同的NPE。 – CelticParser

+0

你有沒有添加任何東西到後面的堆棧?在嘗試訪問它之前,你總是可以添加這個'if(backEntry!= null)'。 – Sam

+0

我創建了一個更好的方法來完成這個請參閱[我的答案](http://stackoverflow.com/a/10955165/742030)。 Thnx – CelticParser

0

我不得不改變方式來做到這一點,我得到了它的工作。我還需要它在所有碎片上運行,以便我可以重用我的方法。看看我的問題,我edited here如何做到這一點。