0

アクティビティに読み込まれたフラグメントのバックスタック数を取得しようとしています。ここでの考え方は、getBackStackEntryCount が '0' を返す場合、onexitCheck() メソッドを実行してユーザーに終了するかどうかを尋ねますが、70 行目で getBackStackEntryCount() を取得する NPE を取得しています。

何が間違っているのかわかりません。私の方法を見て、あなたの答えに修正を加えてください。サンクス。

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

私はこれを推測するつもりです:

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

これになるはずです:

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

カウントは、1つのエントリに対して1、2つのエントリに対して2などを返すためです。ただし、エントリのインデックスは0から始まります。

于 2012-06-08T17:55:16.897 に答える
0

これを行う方法を変更する必要があり、それを機能させました。メソッドを再利用できるように、すべてのフラグメントで機能する必要もありました。ここで編集した SO の質問を見てください。

于 2012-06-08T19:46:24.237 に答える