Я пытался понять это.
Я начну с того, что существует много решений StackOverflow, но большинство из них предлагают подключить onBackPressed() самостоятельно, что действительно работает, но я не понимаю, почему я не получаю такое поведение бесплатно с помощью .addToBackStack
Не могу найти ничего подходящего в документации, кроме того, что это должно было сработать.
Я использую самую простую форму, чтобы добавить фрагмент в стопку.
getActivity().getSupportFragmentManager().beginTransaction().add(R.id.create_fragment_holder2, new MyFragment(), TAG).addToBackStack(TAG).commit();
getActivity — это FragmentActivity. Идет вместе с этим FrameLayout:
<FrameLayout
android:id="@+id/create_card_fragment_holder2"
android:layout_width="match_parent"
android:layout_height="match_parent" />
И простой фрагмент с TextView с синим фоном
public class MyFragment extends Fragment{
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.my_layout, container, false);
}}
Проблема в том, что если я не попрошу .addToBackStack, то кнопка «Назад» закроет содержащий фрагмент, а если я это сделаю, кнопка «Назад» не будет реагировать, и я навсегда увижу этот синий экран.
Каждое решение StackOverflow, которое я нашел, говорит о том, что нужно подключить onBackPressed() самостоятельно, что действительно работает, но я не понимаю, почему я не получаю это поведение бесплатно с помощью .addToBackStack. Не могу найти ничего подходящего в документации, кроме того, что это должно было сработать.
ОБНОВЛЕНИЕ: я обнаружил, что это не работает, потому что я блокировал его в onBackPress в действии. Так что без него он будет работать как положено. Тем не менее, это хорошее место для ввода проверки и предотвращения ее работы, если это вам нужно :)
MyFragment
только один раз? - person petey   schedule 16.05.2017