У меня есть фрагмент активности, который я использую как панель навигации. Он содержит кнопки, при нажатии на которые запускаются новые действия (startActivity из фрагмента просто вызывает startActivity для текущего действия).
На всю жизнь я не могу понять, как я закончу текущую деятельность после того, как начну новую.
Я хочу добиться чего-то вроде этого во фрагменте:
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
if (view == mButtonShows) {
Intent intent = new Intent(view.getContext(), MyNewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
Но кажется, что Fragment.class не реализует finish () (например, реализует startActivity (...)).
Я хотел бы, чтобы backstack активности был очищен, когда они запускают 2-е действие. (так что при возврате из нового действия технически они вернутся обратно в средство запуска)
getActivity()
может бытьnull
в некоторых случаях. Что нам тогда делать?finish
.А на самом деле...
Я бы не хотел, чтобы фрагмент пытался завершить действие. На мой взгляд, это придает Фрагменту слишком большой авторитет. Вместо этого я бы использовал руководство здесь: http://developer.android.com/training/basics/fragments/communicating.html
Пусть Фрагмент определит интерфейс, который должно реализовывать действие. Вызовите Activity, а затем пусть Activity решит, что делать с информацией. Если деятельность хочет закончить сама себя, то может.
источник
Как упоминал Джон Ф. Хэнкок , таким образом фрагмент может «закрыть» действие, предлагая закрыть действие. Это делает фрагмент переносимым, как и причина для них. Если вы используете его в другом действии, возможно, вы не захотите закрывать действие.
Код ниже - это отрывок из действия и фрагмент, в котором есть кнопки сохранения и отмены.
PlayerActivity
PlayerInfoFragment, содержащий интерфейс, который необходимо реализовать для вызывающего действия.
источник
Каждый раз, когда я использую finish, чтобы закрыть фрагмент, вся активность закрывается. Согласно документации, фрагменты должны оставаться, пока сохраняется родительская активность.
Вместо этого я обнаружил, что могу изменить представление родительского действия с помощью этого оператора: setContentView (R.layout.activity_main);
Это возвращает меня к родительской деятельности.
Я надеюсь, что это поможет кому-то еще, кто может это искать.
источник
Очень просто...
1- просто захватите активность
getActivity()
во фрагменте2- затем позвоните
finish();
Так что просто
getActivity().finish();
закончим свою родительскую деятельность.источник
Вы должны использовать метод getActivity (), чтобы завершить действие из фрагмента.
источник
Во фрагменте используйте getActivity.finishAffinity ()
Он также удалит весь фрагмент, который был выдвинут текущим действием, из стека с действием ...
источник
Попробуй это. Предупреждений быть не должно ...
источник
15 июня 2020 г. - Обновленный ответ.
У вас есть два варианта для Java и Kotlin. Однако логика обоих способов одинакова. Вы должны вызвать действие после вызова метода finish () .
Если ваша активность не может быть нулевой, используйте Answer_1 . Однако, если ваша активность может быть нулевой , используйте Ответ_2 .
@canerkaseler
источник
да
Fragment.class
не реализуетfinish()
При работе с фрагментами вместо использования this или ссылки на контекст всегда используйте
getActivity()
. Вам следует позвонитьисточник