1

私の活動:

A - メイン アクティビティ (ログイン画面のようなもの)、finish() で他のアクティビティに移動

B - ユーザーコンテンツ

C = その他のユーザー コンテンツ

A > B > C に移動し、ホームを押して、ランチャーからアプリを起動すると、バック スタックが復元された C が表示されます B > C (top) 、ここでは問題ありません

A > B > C に移動し、ホームを押して、ホーム画面の Google 検索バーからアプリを起動すると、A が表示され、バック スタック B > C > A (上) が表示されます。

問題は、なぜそれが起こっているのか、どうすれば修正できるのかということです。

マニフェストのスニペット:

<activity
  android:name="ActivityA"
  android:label="@string/app_name"
  android:launchMode="standard"
  android:windowSoftInputMode="stateHidden|adjustPan" >
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>
  <activity 
    android:name="ActivityB"
    android:label="@string/b_screen_title" >
  </activity>
  <activity
    android:name="ActivityC"
    android:label="@string/c_screen_title"
    android:windowSoftInputMode="stateVisible|adjustResize" >
  </activity>
4

2 に答える 2

1

Google 検索バーを使用してアプリを選択すると、ルート アクティビティが起動します (この場合はActivityA)。これは、アプリケーションを起動するときにランチャーが行うこととは異なります (アプリケーションが既に実行されている場合は、既存のタスクをフォアグラウンドに移動するだけです)。アプリでこの動作をシミュレートするには、次のコードを に追加しますActivityA.onCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate();
    // If we are not the root of this task, it means that this activity has been launched
    //  by another mechanism (ie: Google Search)
    if (!isTaskRoot()) {
        // This isn't the root of this task, so just go away quietly and drop the user
        //  into the application wherever he left it
        finish();
        return;
    }
    // ...the rest of your onCreate() goes here...
}
于 2013-05-14T16:00:18.183 に答える
0

グーグル開発者サイトから:

android:windowSoftInputMode アクティビティのメイン ウィンドウが、画面上のソフト キーボードを含むウィンドウと対話する方法。この属性の設定は、次の 2 つのことに影響します。 アクティビティがユーザーの注意の対象になったときのソフト キーボードの状態 (非表示か表示か)。アクティビティのメイン ウィンドウに加えられた調整 — ウィンドウの一部がソフト キーボードで覆われている場合に、ウィンドウのサイズを小さくしてソフト キーボード用のスペースを確保するか、現在のフォーカスが見えるようにコンテンツをパンするか。

設定は、次の表にリストされている値のいずれか、または 1 つの "state..." 値と 1 つの "adjust..." 値の組み合わせである必要があります。いずれかのグループに複数の値を設定すると (たとえば、複数の "state..." 値)、未定義の結果が生じます。個々の値は縦棒 (|) で区切られます。

マニフェストで、2 つの調整引数を同時に指定したため、結果が未定義になる可能性があります。試してみる

于 2013-05-13T20:37:39.073 に答える