Переопределение 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)
}