0

起動時に、フラグメント レイアウトの空白の詳細側にようこそ画面 (または何か - ログイン) をホストする方法を探していました。その後、ユーザーが左側のメニュー項目の 1 つを押したときに、残りのプログラム実行のためにフラグメントを削除したいと思います。構成の変更が台無しになるため、バックスタックに追加したくありません。共有設定を使用して、フラグメントが表示されているかどうかに関するブール値をホストすることを検討しました。このメソッドに関する唯一の懸念は、アプリの次の実行のためにブール値を安全にリセットする場所です。アプリを閉じたときに onStop や onDetach などが確実に呼び出されるという保証はないので、アプリが間違った状態で閉じられた場合、アプリは役に立たなくなります (最初のフラグメントは「

これまでのところ、メイン アクティビティの onCreate に何かを追加しようとしてきましたが、成功していません。

前もって感謝します。

ケン

4

2 に答える 2

0

フラグメントが独自のアクティビティの一部になる可能性がある場合は、android:noHistory="true"属性を使用してアクティビティをバックスタックから切り離すことができます。ユーザーが後方に移動しようとすると、アプリケーションを終了する前にバックスタックの一番下に 2 回到達します。

フラグメントを独自のアクティビティに分割できない場合は、機能しnoHistoryない可能性があります。自分で試したことがないのでわかりません。

于 2013-05-09T05:06:29.657 に答える
0

メイン アクティビティのフラグメントとアクティビティの両方を表示するウェルカム画面またはログイン画面を作成するソリューションを思いつくことができました。テストしたとおり、問題なく動作しているようです。

private boolean welcomeShown;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_list);

        if (findViewById(R.id.item_detail_container) != null) { 
            mTwoPane = true;
            ((MainFragment) getSupportFragmentManager().findFragmentById(
                    R.id.item_list)).setActivateOnItemClick(true);
        }

        if (savedInstanceState != null){
                    welcomeShown = savedInstanceState.getBoolean("displayed");
        }

        if(!welcomeShown){

            if (mTwoPane){
                WelcomeFragment welcomeFragment = new WelcomeFragment();
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.item_detail_container, welcomeFragment)
                        .commit();
            }
            else{

                Intent welcomeIntent = new Intent(this, WelcomeActivity.class);
                startActivity(welcomeIntent);
                welcomeShown = true;
            }
        }           
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean("displayed", true);
    }
于 2013-05-09T10:21:07.403 に答える