Переопределение Android onBackPressed()

Можно ли переопределить onBackPressed() только для одного действия?

При нажатии кнопки "Назад" я хочу вызвать диалоговое окно для определенного действия, но во всех других действиях я хочу, чтобы оно работало так же, как раньше (переход к предыдущим действиям) .,,

Спасибо за ваши ответы заранее.

РЕДАКТИРОВАНИЕ

Спасибо всем за ваши ответы, у меня уже было все, как вы сказали мне, но моя проблема заключалась в том, что, когда я нажимал кнопку "Назад" в другом действии, я переходил к своему предыдущему действию (тому, где у меня была кнопка "Назад", переопределить), и я думал, что это не работает, я думал, что он переопределяет onBackPressed() во всем приложении, теперь я получил это:D

10 ответов

Решение

Да. Только переопределите это в этом Activity с

@Override
public void onBackPressed()
{
     // code here to show dialog
     super.onBackPressed();  // optional depending on your needs
}

не помещайте этот код в любой другой Activity

Переопределить onBackPressed() метод в соответствии с примером codeMagic, и удалите вызов super.onBackPressed(); если вы не хотите, чтобы выполнялось действие по умолчанию (завершение текущего действия).

OnBackPressed устарел.

Решение Котлина здесь:

      onBackPressedDispatcher.addCallback(object: OnBackPressedCallback(true) {
            /* override back pressing */
            override fun handleOnBackPressed() {
                //Your code here
            }
        })

Вы можете просто вызвать onBackPressed(), и если вы хотите, чтобы какая-то активность отображалась после кнопки "Назад", вы упомянули

Intent intent = new Intent(ResetPinActivity.this, MenuActivity.class);
    startActivity(intent);
    finish();

это сработало для меня.

Просто используйте следующий код с инициализацией поля

private int count = 0;
    @Override
public void onBackPressed() {
    count++;
    if (count >=1) {
        /* If count is greater than 1 ,you can either move to the next 
        activity or just quit. */
        Intent intent = new Intent(ResetActivity.this, LoginActivity.class);
        startActivity(intent);
        finish();
        overridePendingTransition
        (R.anim.push_left_in, R.anim.push_left_out);
        /* Quitting */
        finishAffinity();
    } else {
        Toast.makeText(this, "Press back again to Leave!", Toast.LENGTH_SHORT).show();

        // resetting the counter in 2s
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                count = 0;
            }
        }, 2000);
    }
    super.onBackPressed();
}

Просто позвони onBackPressed() метод в упражнении, которое вы хотите показать в диалоге, а внутри него показать ваш диалог.

Сначала вы должны учитывать, что если ваша деятельность, которую я назвал А, продлевает другую деятельность (Б) и в обоих

Если вы хотите использовать функцию on backpressed, то каждый код, который вы имеете в B, тоже работает в A. Поэтому, если вы хотите отделить их, вы должны разделить их. Это означает, что A не должен расширять B, тогда вы можете включить обратное нажатие отдельно для каждого из них.

Попробуйте это работает

  @Override
public void onBackPressed(){
        super.onBackPressed();
         Intent i=new Intent(Intent.ACTION_MAIN);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        finish();
}

Лучший и самый общий способ управления музыкой - создать действие Матери, в котором вы переопределяете startActivity(Intent intent) - в это ты вкладываешь shouldPlay=true, а также onBackPressed() - в это ты вкладываешь shouldPlay = true,onStop - в него вы помещаете условный mediaPlayer.stop с mustPlay в качестве условия

Затем просто распространите действие "мама" на все остальные действия, и дублирование кода не требуется.

Простое решение на Kotlin. Создайте функцию расширения ниже.

      fun Fragment.onBackPressed(
    navigateToHomeGraph: () -> Unit
) {
    val onBackPressedDispatcher = requireActivity().onBackPressedDispatcher
    onBackPressedDispatcher.addCallback(
        viewLifecycleOwner,
        object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                navigateToHomeGraph()
            }
        }
     )
}

Теперь вы можете просто вызвать это на своем фрагменте и передать желаемый пункт назначения.

      onBackPressed {
    findNavController().navigate(R.id.destination_nav_graph)
}
Другие вопросы по тегам