2013-05-22 3 views
6

У меня есть программа. Первым действием является экран всплеска, а второй - вход в систему, а третий - это представление меню списка, а затем 2 других действия. Экран заставки исчезает через 3 секунды, и если флажок «Запомнить меня» отмечен мной, он отображается непосредственно на странице меню.
Я переопределяю функцию onBackPressed в действии меню, чтобы она выходила из программы непосредственно после того, как пользователь щелкнул ее в меню. Однако, если я пережил другие действия, он не вышел; он переходит к предыдущему действию в стеке, и диалоговое окно не появляется, хотя оно действительно появляется на секунду не меньше и сразу исчезает.android - onBackPressed() не работает для меня

Вот моя onBackPressed функция

public void onBackPressed() { 
    // super.onBackPressed(); 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage("Are you Sure want to close the Application..?") 
     .setCancelable(false) 
     .setTitle("EXIT") 
     .setNegativeButton("No", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }) 
     .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       finish(); 
      } 
     }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
    //super.onBackPressed(); 
} 
+1

что именно ваша проблема – Blackbelt

+3

ничего себе, есть 6 1/2 строки текста, и я не могу найти ни одной точки. Как насчет улучшения грамматики в читаемом состоянии ?! – WarrenFaith

+0

Как насчет добавления точек и запятых для начала. Как-то вы можете справиться с грамматикой :) –

ответ

7

Я хотел бы предложить вам использовать ActionBar как предложено WarrenFaith в комментариях ниже. Пожалуйста, проверьте ссылку ниже для получения дополнительной информации

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

Вот учебник по той же

http://www.vogella.com/articles/AndroidActionBar/article.html

Вы можете использовать это. Однако это тоже плохой дизайн. Вы можете проверить комментарии ниже, чтобы узнать, почему

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     onBackPressed(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 

public void onBackPressed() { 
    Intent myIntent = new Intent(MyActivity.this, MainActivity.class); 

    myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(myIntent); 
    finish(); 
    return; 
} 

Onn кнопка назад нажимается трактир текущей деятельности, когда вы снова нажмете вы очистить стек активности и naviagate к MainActivity.

Также я бы предложил, чтобы нет, чтобы отобразить диалоговое окно предупреждения на кнопке с обратной кнопкой. Его плохой дизайн. Вы можете искать на SO. я читал то же самое и ответили CommonsWare

+0

Подождите минуту. Вы говорите о том, что «close» -dialog является плохим дизайном, но в тот же момент вы предлагаете вместо этого открыть новую активность? Ты шутишь, что ли? Это даже хуже, чем диалоговое окно, спрашивающее, случайно ли я нажимаю кнопку «Назад» ... Кнопка «Назад» должна хотя бы принести мне * назад * и не во вновь созданную деятельность! – WarrenFaith

+0

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

+0

Все еще один из худших опытов UX, которые вы можете создать. Поэтому я буду голосовать. – WarrenFaith

1

Вы можете изменить кнопку назад, как этот

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // write your code here 
    } 
    return true; 
} 
1
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    int count = getSupportFragmentManager().getBackStackEntryCount(); 
    Log.e("count", "is getBackStackEntryCount -> " + count); 
    for (int i = 0; i < count; ++i) { 
     getSupportFragmentManager().popBackStackImmediate(); 
     Log.e("getBackStack", "IS REMOVED " + i); 
    } 
    // toolbar.setTitle("Dashboard"); 
} 
0

Снятие отделки(); после каждого startActivity(); позволит использовать правильную навигацию вместо вызова finish(); который выполняет метод onDestroy(). Спасибо . Нет необходимости переопределять функцию onBackPressed. Используйте финиш() только тогда, когда ваша деятельность больше не нужна и должна быть закрыта.

+0

Его лучше, чем писать onPressedBack для каждого действия для навигации, не говоря уже о всех диалоговых окнах Alert. просто говорю . –

+0

Просто используйте финиш во всех действиях, которые вы не хотите, чтобы пользователь возвращался, например, в логин –

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