2016-03-29 4 views
0

У меня есть действие A, и когда я нажимаю элемент панели инструментов, он начинает действие B с использованием startActivity (намерение). Всякий раз, когда я нажимаю кнопку «Назад» или значок навигации вверх, он закрывает мое приложение. Я считаю, что это потому, что я использую launchMode = "singleTop" в моей родительской активности (я использую это, потому что у меня есть Search Search и возможность поиска, потому что я не хочу запускать другой экземпляр моей активности для поиска). Итак, вопрос: как я могу вернуться из дочерней активности (B) в родительскую активность (A), используя как навигационную, так и обратную кнопку без закрытия моего приложения? Я искал об этом, и я нашел что-то о onNewIntent(). Если это мое решение, как я должен использовать его правильно?Вверх Навигация и режим запуска SingleTop


Вот мой файл манифеста:

 <activity 
      android:name="com.example.fernando.inspectionrover.MainActivity" 
      android:screenOrientation="landscape"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <action android:name="android.intent.action.SEARCH" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <meta-data 
       android:name="android.app.searchable" 
       android:resource="@xml/searchable" /> 
     </activity> 
     <activity 
      android:name="com.example.fernando.inspectionrover.BluetoothSettingsActivity" 
      android:parentActivityName="com.example.fernando.inspectionrover.MainActivity" 
      android:screenOrientation="landscape"> 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="com.example.fernando.inspectionrover.MainActivity" /> 

Вот как начать свою новую деятельность:

switch (id) { 
      case R.id.bluetoothActivity: 
       Intent switchActivity = new Intent(this, BluetoothSettingsActivity.class); 
       startActivity(switchActivity); 
       Log.i(LIFE_CYCLE, "Switching from " + getLocalClassName() + " to Bluetooth Setting Activity"); 
       finish(); 
       break; 
     } 

ответ

2

Возможно, я просто прошу прощения, но я думаю, что основная проблема заключается в том, что вы вызываете финиш после вы запускаете новое действие, которое вызывает уничтожение для вызывающей активности и удаляет его из стека действий.

+0

вот в чем проблема: p –

+0

Ваш аванс просто дал репутацию, чтобы увеличить ваш. –

2

Single Top означает, что если вы запускаете деятельность, которая уже сверху, он не будет создан снова, только что возобновлен.

Причина, по которой ваша обратная навигация закрывает приложение, заключается в том, что вы вызываете finish() сразу после запуска нового действия. Это означает, что вам больше не нужна эта активность, поэтому она удаляется из стека. Если вы вернетесь на активность B, приложение закроется, потому что нечего возвращать (вы называете finish()?