Ответ 1
При работе с фрагментами вместо использования this
или ссылки на контекст всегда используйте getActivity()
. Вы должны позвонить
getActivity().finish();
чтобы завершить вашу деятельность из фрагмента.
У меня есть фрагмент в активности, который я использую в качестве ящика навигации. Он содержит кнопки, которые при нажатии запускают новые действия (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-го действия. (так что откат от новой активности технически отбросит их обратно в пусковую установку)
При работе с фрагментами вместо использования this
или ссылки на контекст всегда используйте getActivity()
. Вы должны позвонить
getActivity().finish();
чтобы завершить вашу деятельность из фрагмента.
Ну на самом деле...
Я бы не хотел, чтобы Fragment попытался закончить Activity. На мой взгляд, это слишком сильно влияет на Фрагмент. Вместо этого я использовал бы руководство здесь: http://developer.android.com/training/basics/fragments/communicating.html
Определите Fragment интерфейс, который должен реализовать Activity. Сделайте вызов для Activity, затем пусть Activity решит, что делать с информацией. Если активность хочет закончить сама, тогда она может.
Как упоминалось Jon F Hancock, вот как фрагмент может "закрыть" активность, предложив закрыть эту деятельность. Это делает перенос фрагмента как причина для них. Если вы используете его в другом действии, вы можете не захотеть закрыть активность.
Ниже приведен фрагмент действия и фрагмента, в котором есть кнопка сохранения и отмены.
PlayerActivity
public class PlayerActivity extends Activity
implements PlayerInfo.PlayerAddListener {
public void onPlayerCancel() {
// Decide if its suitable to close the activity,
//e.g. is an edit being done in one of the other fragments?
finish();
}
}
PlayerInfoFragment, который содержит интерфейс, который должна реализовать реализация вызова.
public class PlayerInfoFragment extends Fragment {
private PlayerAddListener callback; // implemented in the Activity
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
callback= (PlayerAddListener) activity;
}
public interface PlayerAddListener {
public void onPlayerSave(Player p); // not shown in impl above
public void onPlayerCancel();
}
public void btnCancel(View v) {
callback.onPlayerCancel(); // the activity implementation
}
}
Очень просто...
1- просто захватить активность getActivity()
во фрагменте
2- затем вызовите finish();
Итак, просто getActivity().finish();
завершит родительскую активность.
Каждый раз, когда я использую финиш, чтобы закрыть фрагмент, вся активность закрывается. Согласно документам, фрагменты должны оставаться до тех пор, пока сохраняется родительская активность.
Вместо этого я обнаружил, что могу изменить представления назад родительской активности, используя это утверждение: setContentView (R.layout.activity_main);
Это возвращает меня к родительской активности.
Я надеюсь, что это поможет кому-то еще, кто может это искать.
Вы должны использовать метод getActivity(), чтобы завершить действие из фрагмента.
getActivity().finish();
yes Fragment.class
не реализует finish()
При работе с фрагментами вместо использования этого или ссылки на контекст всегда используйте getActivity()
. Вы должны позвонить
Во фрагменте используйте getActivity.finishAffinity()