0

我正在尝试获取活动中加载的片段的回栈计数。这里的想法是,如果 getBackStackEntryCount 返回“0”,则运行我的 onexitCheck() 方法来磨损/要求用户退出或不退出,但我在第 70 行得到一个 NPE,它获取 getBackStackEntryCount()。

我无法弄清楚我有什么问题。请查看我的方法并在您的答案中添加更正。谢谢。

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();
        }
    }
4

2 回答 2

0

我不得不改变这样做的方式,并且让它发挥作用。我还需要它在所有片段上运行,以便我可以重用我的方法。看看我在这里编辑的关于我是如何做到的一个 SO 问题。

于 2012-06-08T19:46:24.237 回答
0

我猜是这样的:

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

应该变成这样:

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

因为计数返回一个条目为 1,两个条目返回 2,依此类推;但条目的索引从 0 开始。

于 2012-06-08T17:55:16.897 回答