1

タブに 2 つの SherlockFragment を持つ SherlockFragmentActivity があります。当然のことながら、現在選択されているタブを、方向の変更時と、ユーザーがいずれかのフラグメントから起動したアクティビティから戻ったときにアクティブのままにしたいと考えています。

したがって、 onSaveInstanceStateを使用して、選択したタブのインデックスを保存し、 onCreateで再度選択します。これは、向きの変更でうまく機能します。しかし、別のアクティビティ (設定画面としましょう) を起動してそこから戻ると、onSaveInstanceStateが呼び出されていても、保存されたインスタンスの状態は常にonCreateで null になります。

ですから、問題は、私がこれを間違った方向に進めているだけなのかということだと思います。フラグメントを使用する場合、すべてのサブ画面をフラグメントとして 1 つのアクティビティのみを使用する必要がありますか?

または、保存したインスタンスの状態がアクティビティの変更間で消える理由は他にありますか?

編集:アクティビティBのコード

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent intent = new Intent(this, MainActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
4

2 に答える 2

2

onOptionsItemSelectedコードを以下に変更します。その下のものを再起動する代わりに、をfinish()終了します。Activity

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
于 2012-08-02T20:05:44.430 に答える
1

あなたがしていることは問題ありません。

混乱を招く可能性があることの 1 つは、アクティビティ A からアクティビティ B を起動しても、onSaveInstanceState がまったく呼び出されるとは限らないことです。OS は、アクティビティ A がアクティビティ B の間に破棄される可能性があるかどうかに基づいて、この決定を行います。

したがって、実際に考慮すべき 2 つのケースがあります。

ケース1

  • アクティビティ A は一時停止中です
  • onSaveInstanceState は呼び出されません

ケース 2

  • アクティビティ A は一時停止中です
  • onSaveInstanceState が呼び出されます

詳細については、 onSaveInstanceState のドキュメントを参照してください。

于 2012-08-02T19:23:27.783 に答える