2012-06-08 31 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如何做到这一点。