3

アプリケーションには 2 つのアクティビティがあります。activity1では、いくつかの構成を設定し、いくつかのコンポーネントの状態を変更します (例: ボタンの状態を無効に設定)。そして、activity2に移動します。

activity2でいくつかの作業を行い、最後にこのアクティビティを終了して activity1 に戻ります

しかし、activity1では、このアクティビティを離れたときのコンポーネントの状態は同じです。

XML ファイル(レイアウト)で宣言された値でコンポーネントの状態をリセットする方法は?

4

3 に答える 3

3

このインスタンスには、Activity の状態を管理するために使用できる 3 つのコールバックがあります。

アクティビティに戻るため、onRestart()が呼び出され、このコールバックはこのインスタンスに固有です (アクティビティが最初に作成および表示されたときに呼び出されるわけではありません)。

受け取るその他のコールバックはonStart()onResume()で、Activity がフォアグラウンドに来るたびに呼び出されます (初回を含む)。アクティビティのライフサイクルの詳細については、こちらをご覧ください。

アプリケーションに最適なこれらの場所のいずれかで、UI の状態をリセットできます。ただし、ビューを XML で定義されたステージに戻すために呼び出すことができる直接の「リセット」メソッドはありません。ビュー フラグを必要な状態に戻すには、メソッドを手動で呼び出す必要があります。

HTH

于 2012-06-04T15:58:00.847 に答える
3

finish() を呼び出した結果として前のアクティビティに戻ると、onActivityResult メソッドが呼び出されます。このメソッド内で、ビューを目的の状態に再設定できます。

例えば:


    ...
        Intent result_intent = new Intent();
        setResult( Activity.RESULT_OK, result_intent );
        finish();
    }

    public void onActivityResult( int requestCode, int resultCode, Intent data )
    {
        setContentView( R.layout.my_activity );
    }
于 2012-11-14T04:26:34.603 に答える
2

目的を達成するためにxmlファイルにのみ設定できるフラグや属性はありませんが、良いニュースは、説明することをさまざまな方法で実行できることです。

1つの方法は、この2つの操作を実行することです。

次のプロパティを使用して、manifest.xmlに「activity1」属性を設定します。

android:noHistory="true"

このフラグは、スタックから移動すると、スタックからアクティビティを削除します。

次に、「activity2」のonBackPressed()メソッドをオーバーライドします。

それ以外の:

super.onBackPressed();

書きます:

Intent intent = new Intent(this, Activity1.class);
startActivity(intent);
finish();

これにより、ユーザーがactivity2から押し戻すと、activity1の新しいインスタンスが起動されます。

2番目のオプションは、 Debunwiredのアドバイスに従い、アクティビティがforgroundに戻ったときに呼び出されるonResume()メソッドを「activity1」に実装することです。

それ以外の:

super.onBackPressed();

書きます:

Intent intent = getIntent();
startActivity(intent);
finish();

この実装により、「activity1」は、フォアグラウンドに戻ったときに自分自身を閉じて再度開くことにより、「再起動」します。

私の観点から何をすべきかを知りたい場合:おそらくアクティビティを再開したい理由は、いくつかの値とビューの状態を更新したいからです。アクティビティを再開するのではなく、onResume()メソッドで、データと適切なビューを「更新」するコードを実行する必要があります。それだけです。

于 2012-06-04T16:12:18.923 に答える