0

フラグメントを使用するアプリケーションがあります。アプリの起動時にこれを行います:

    FragmentManager man = getFragmentManager();
    FragmentTransaction trans = man.beginTransaction();
    trans.replace(R.id.master_container, master);
    trans.commit();

ご覧のとおり、ユーザーがフラグメントのない空のアクティビティに巻き込まれたくないため、バックスタックに追加しません。しかし、それはうまくいきません。画面の戻るボタンを押すとmaster、フラグメントが閉じられ、黒いアクティビティが残るためです。今私はonBackPressed()私を助けるためにメソッドをオーバーライドします:

@Override
public void onBackPressed() {

    // 'master' is the Mainscreen Fragment
    if (master.isVisible()) {

        if (!second) {
            Toast.makeText(getApplication(), "Press back again to close application", Toast.LENGTH_SHORT).show();
            second = true;
        } else {
            second = false;
            CreamyActivity.this.finish();
        }

    } else {
        super.onBackPressed();
        bar.show();
    }
}

しかしCreamyActivity.this.finish();、再びフラグメントを閉じて空のアクティビティにドロップするときはいつでも(まるでバックスタックをたどっていたかのように)(これはすべてアクティビティにあります!)

私はあなたが私を助けることができるかどうか疑問に思っていました. 通常、アプリは自動的に終了するべきではありませんが、ここで回避策を提供していただければ幸いです。それとも、バックスタックに何か問題がありますか? とにかく自動的に追加しますか?

よろしくお願いします<3

4

1 に答える 1

0

CommonsWare (ありがとう!) が指摘したように、アプリケーションの動作に干渉するものが他にもありました。次のように構成されています。

アプリの起動 --> LaunchActivity if(API > 14) --> CreamyActivty

それ以外 --> CrunchyActivity

CreamyActivity で finish() を呼び出すと、アプリは、if-else ステートメント以外の onCreate() に何も含まれていない LaunchActivity に戻りました。今私はこれをやった:

LaunchActivity に次を追加しました。

    private IntentFilter filter;

    filter = new IntentFilter(Util.BACKSTACK_INTENT);

    registerReceiver(new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            LaunchActivity.this.finish();
            unregisterReceiver(this);

        }
    }, filter);

Creamy/Crunchy アクティビティの onBackPressed() メソッドに、次のように追加しました。

            CreamyActivity.this.finish();
            Intent kill = new Intent();
            kill.setAction(Util.BACKSTACK_INTENT);
            this.sendBroadcast(kill);

このように、ユーザーがアプリケーションを終了するたびに、LaunchActivity にインテントを送り返し、それも終了します。

また。以前の設計の欠陥を指摘してくれた CommonsWare に感謝します :P これが誰かの役に立てば幸いです。

于 2013-04-13T11:27:35.463 に答える