2

Сообщений отредактировалиAndroid App Не Закрыв Должное Когда Нажатие кнопки Назад

Я запрограммировал андроид приложение в качестве учебного проекта для целей обучения. Я сталкиваюсь с проблемой, когда, когда я нажимаю кнопку «Назад» на основном мероприятии после посещения активности настроек и внесения изменений там (опции флажка), он возвращается к активности настройки. Если никаких изменений в активности настроек нет, и я вернусь к основному действию и снова вернусь, он прекратится. Если я перейду к любому другому действию, а затем вернусь к основному, нажмите снова, он закрывается нормально одним нажатием.

Ниже вы увидите код кнопки «Назад» для активности настроек и основного действия.

user_settings_activity.java (настройки активности):

// When the back button is pressed, it goes back to the previous screen. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
} 

User_Options.java (основная деятельность):

// When the back button is clicked, the user is asked if they want to close the app window or not. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
} 

Пожалуйста, сообщите мне, как к любому другому коду требуется.

Любая помощь, направленная на решение, будет оценена по достоинству.

спасибо.

РЕШЕНИЕ

Во-первых, спасибо всем, кто застрял с этим вопросом, предлагающих ответы и комментарии. Я ценю помощь каждого. Теперь, немного поправившись, мне наконец-то удалось выработать решение. Код ниже.

Настройки активность:

// For the go back button. 
public void go_back_butt(View v){ 
    // Goes to main activity. 
    Intent main_activity = new Intent(getApplicationContext(), User_Options.class); 
    main_activity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    main_activity.putExtra("EXIT", true); 
    startActivity(main_activity); 

    finish(); 
} 

И

// When the back button is pressed, it goes back to the previous screen. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
} 

Основная деятельность:

// When the back button is clicked, the user is asked if they want to close the app window or not. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 

    if (getIntent().getBooleanExtra("EXIT", false)) { 
     finish(); 
    } 

    android.os.Process.killProcess(android.os.Process.myPid()); 
} 

Объяснение:

Как @chichiangho упоминалось, мне нужно было взять In- глубинный взгляд в стеке. С моими ограниченными знаниями по таким вопросам я сделал, но сумел выяснить, что по какой-то причине активность настроек не закрывалась должным образом, как я изначально предполагал. Поэтому мне стало интересно, как я могу справиться с этим, сохраняя сохраненные настройки.

Благодаря ответу @kevz и @MFP мне удалось создать работу. Я внедрил кнопку «Назад» (см. Код) и использовал процесс уничтожения в основном действии, чтобы обеспечить правильное завершение работы приложения. Я также передал намерение от активности настроек к основной деятельности, чтобы обеспечить завершение процесса().

Спасибо всем, кто принимал участие, и потратил время, чтобы опубликовать ваши полезные ответы, которые заставили меня думать больше за пределами коробки и узнать о вещах в Android-приложении одновременно. =).

+1

Я прочитал вашу короткую версию и, по-моему, вы не вызываете финиш при переходе ко второму действию –

+0

@Mohit G: r u начало MainActivity в SettingActivity on BackPress? – kevz

+0

Я думаю, что это та самая проблема, что я нашел в своем телефоне, только во время отладки моего приложения он запускается дважды – Androider

ответ

1

ничего не предпринимайте, когда вы закрываете настройку.

вот ваш стек.

на первый: MainActivity

старт SettingActivity: MainActivity-> SettingActivity

начало MainActivity в onBackPressed(): MainActivity-> SettingActivity-> MainActivity

затем закончить SettingActivity: MainActivity-> MainActivity

видите, есть две MainActivities, я думаю, именно поэтому ваш MainActivity будет выглядеть как перезапуск.

+0

Событие, которое вы ничего не делаете, когда вызывается 'onBackPressed()', действие завершается и возвращается к предыдущему действию – chichiangho

+0

Это работало чудесно, однако из-за этого я столкнулся с новой проблемой. Теперь, когда я нажимаю кнопку «Назад» после изменения чего-либо в настройках. Я перехожу к основной деятельности. Но оттуда, когда я нажимаю кнопку «Назад» на основном мероприятии, он возвращается к настройкам, даже если я его не запрограммировал. –

+0

@Mohit G: Запустите настройку urActivity для результатов, используя startActivityForResults(). Тогда, если u делает какие-либо изменения, u может просто установить setResult() и finish() settingActivity. – kevz

4

Переопределение onBackPressed функции внутри деятельности

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    // Call finish() function here 
    finish(); 
} 
+0

Спасибо за ваш ответ. Я пробовал ваше решение, но оно не дало никаких улучшений. Результат тот же. –

+0

удалите эту строку: Intent main_activity = new Intent (user_settings_activity.this, User_Options.class); startActivity (main_activity); | от user_settings_activity.java –

+0

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

2

Вы можете использовать ниже код для выхода из приложения.

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    ActivityCompat.finishAffinity(MainActivity.this); 
    android.os.Process.killProcess(android.os.Process.myPid()); 
} 
+0

Спасибо за ваш ответ. Я попробовал вышеуказанный код, но он не сработал, поскольку проблема все еще сохраняется. –

+0

Спасибо за вашу помощь, я разработал решение. Проверьте это, я разместил его в своем оригинальном посте, если вам интересно =). –

1

Используйте этот ..

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

Спасибо за вашу помощь, я разработал решение. Проверьте это, я разместил его в своем оригинальном посте, если вам интересно =). –

1

Начиная SettingActivity от MainActivity на кнопку не Нажать на

btnSecond.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, SettingActivity.class)); 
     } 
}); 

Не нужно закончить() MainActvity после запуска SettingActivity.

Не нужно переопределять onKeyDown() или onBackPressed() в SettingActivity.

Независимо от изменений wt, которые вы делаете в настройках, не переопределяйте ни один из вышеперечисленных методов, и он будет работать нормально.

+0

Спасибо за ваш ответ. Я пробовал, но ничего не изменил. Я следил за советом @chichiangho и решил исходную проблему. Но появился новый, где, если я что-то изменил в настройках и вернусь. Если бы я должен был вернуться к выходу, это вернет меня к активности настроек. Код для основной деятельности такой же, как и выше. –

+0

@Mohit G: Проверьте мой отредактированный ответ – kevz

+0

спасибо за ваш ответ и всю вашу помощь. Я должен буду попробовать это завтра в течение дня, потому что сейчас для меня уже поздно. Я дам вам знать, как это происходит. Еще раз спасибо =). –