2013-05-23 3 views
3

У меня есть приложение, в котором у меня 5 видов деятельности. Одно действие в меню и еще 4 дочерние действия, подключенные к экрану меню. Поэтому я могу выбрать любую активность, а затем вернуться к меню. Предположим, что я двигаться, как этотКак закрыть все действия, нажав кнопку «Домашняя страница оборудования»?

Меню -> Activity1 -> Меню -> Activity3 -> деятельности2 -> Меню

и теперь жму Home/Back Button, и я хочу, чтобы мое приложение покажет мне диалоговое окно предупреждения для подтверждения выхода. Если я нажму да, то убейте все действия и покажите начальный экран.

Я пробовал эти финиши(), System.exit (0), но не повезло. finish() и System.exit (0) завершают текущую деятельность не всеми из них. Пожалуйста Покажите мне путь.

+0

вы не можете ,Кнопка «Домой» - это один верный короткий путь для перехода к главному экрану. Используйте панель действий при нажатии на значок приложения, перейдите к экрану меню. затем нажмите кнопку «Назад», чтобы перейти на главный экран. – Raghunandan

+0

http://developer.android.com/design/patterns/navigation.html – Raghunandan

+0

Вы не можете управлять поведением кнопки «Главная». –

ответ

0

Я думаю, что лучше прекратить деятельность ребенка, когда в фоновом режиме. Например

Menu > Activity1 > 

Теперь, если вы идете к menu снова затем закончить Acitivy 1.

Опять Menu > Activity 3 > Activity 2 > Menu

, когда идет в операцию 3, то активность 2 .. затем начать активность 2 из 3, используя начальную активность для результата. SO, если вы хотите перейти в меню из действия 2. затем вы можете пройти через Activity 3.

Еще одно лучшее решение для использования CLEAR_TOP, SINGLE_TASKS флаг для открытия меню. Поэтому, когда вы переходите в меню, активна только активность меню. Затем, вызывая закончить, вы можете закончить свое приложение.

0

Это работает для меня:

Intent intent = new Intent(this, TopMenuActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.putExtra(Utils.INTENT_EXIT, true); 
    startActivity(intent); 
    finish(); // finish the current activity 

А потом в TopMenuActivity OnCreate (метод) добавьте следующие

if(getIntent().getBooleanExtra(Utils.INTENT_EXIT, false)){ 
     finish(); // finish TopMenu and go HOME 
     return; // prevent from doing unnecessary stuff below 
    } 

Грязные, да! Но это работает.

+0

да это работает, но я бы не рекомендовал, чтобы проверить ссылку и комментарии от warrenfaith. Его плохой дизайн http://stackoverflow.com/questions/16691773/android-onbackpressed-not-working-for-me/16692532#16692532 – Raghunandan

+0

@ Raghunandan, да, я согласен с вами. Причина. Я упоминаю, что это грязно. Но работаю, как прелесть в моем приложении. –

+0

Я тоже предложил то же самое, что упоминалось в ссылке, в которой было отклонено. поэтому я предлагаю вам отредактировать свой ответ. warren faith предложила панель действий для того же – Raghunandan

0

Да, вы можете. Есть 2 различных aproches

  1. Использование onActivityResult

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
        // Check which request we're responding to 
        if (resultCode == QUIT_ALL) { 
         // 
         setResult(QUIT_ALL,returnIntent);  
         finish(); 
        } 
    }  
    //last activity 
    setResult(QUIT_ALL,returnIntent);  
    finish(); 
    
  2. в явной форме заявить, что деятельность пропустить стек:

    < activity android:name=".Activity1" android:noHistory="true" ... /> 
    < activity android:name=".Activity2" android:noHistory="true" ... /> 
    
0

Завершите работу, когда дома переключате n Щелкните по этому сценарию в своем действии. Его рабочая идеально подходит для меня ..

@Override общественного логический OnKeyDown (интермедиат KEYCODE, KeyEvent событие) {

if ((keyCode == KeyEvent.KEYCODE_HOME)) { 
    Log.v("hari", "KEYCODE_HOME"); 
    onUserLeaveHint(); 

    return true; 
} 
if ((keyCode == KeyEvent.KEYCODE_BACK)) { 

    return true; 
} 
if ((keyCode == KeyEvent.KEYCODE_MENU)) { 

    return true; 
} 
return false; 
} 


public void onUserLeaveHint() { // this only executes when Home is selected. 

super.onUserLeaveHint(); 
if (!isFinishing()) { 
    Log.v("hari", "if condition working"); 
    finish(); 
} 

} 

, но иногда и обратно кнопка не работает при использовании этого кода ...

Смежные вопросы