【问题标题】:NPE on Android BackStackEntry for onBackPressed用于 onBackPressed 的 Android BackStackEntry 上的 NPE
【发布时间】:2012-06-08 17:11:27
【问题描述】:

我正在尝试获取活动中加载的片段的回栈计数。这里的想法是,如果 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();
        }
    }

【问题讨论】:

  • NPE 可能在 backEntry.getId() 上,因为 backEntry 为空

标签: android android-fragments back-stack


【解决方案1】:

我猜是这样的:

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

应该变成这样:

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

因为计数返回 1 表示一个条目,2 表示两个条目,等等;但条目的索引从 0 开始。

【讨论】:

  • 你有没有在后台添加任何东西?在尝试访问它之前,您始终可以添加此 if(backEntry != null)
  • 我创造了一种更好的方法来做到这一点,请参阅my answer。谢谢
  • 你需要调用fragmentTransaction.addToBackStack(str);
【解决方案2】:

我必须改变执行此操作的方式,然后才开始工作。我还需要它在所有片段上运行,以便我可以重用我的方法。看看我 edited here 的一个 SO 问题,了解我是如何做到的。

【讨论】:

    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2022-01-05
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多