片段人工backstack

Fragment artificial backstack

我试图在从通知栏打开通知后创建人工后台堆栈。

打开通知后的工作流程:

  1. 点击打开 MainActivity 的通知 Intent 后。
  2. 打开 MainActivity 后我检查 if(getArguments != null)。如果它不为空,我打开通知片段并传递收到的通知 ID。
  3. 如果通知if(id != -1)我打开通知片段。

问题是点击后退按钮后我直接返回 MainActivity window 跳过通知片段。

我这样打开通知片段:

 Fragment frag = new NotificationFragment();
 frag.setArguments(bundle);
 FragmentTransaction ft =getSupportFragmentManager().beginTransaction();
 ft.add(R.id.container, NotificationsFragment.getInstance(null, id)).commit();

我这样打开通知片段:

FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
NotificationFragment notificationFragment =  new NotificationFragment();
Bundle bundle =  new Bundle();
bundle.putInt("id", getArguments().getInt("id"));
notificationFragment.setArguments(bundle);
ft.add(R.id.container, notificationFragment).addToBackStack(null).commit();

R.id.container 是 FrameLayout 用于显示片段。 我正在使用支持库。

我读到 FragmentTransaction.replace() 会删除所有现有片段并添加新片段。 FragmentTransaction.add() 将它们添加到 activity 状态。

请有人纠正我做错了什么并告诉我正确的方法。

改变这个

     Fragment frag = new NotificationFragment();
 frag.setArguments(bundle);
 FragmentTransaction ft =getSupportFragmentManager().beginTransaction();
 ft.add(R.id.container, NotificationsFragment.getInstance(null, id)).commit();

     Fragment frag = new NotificationFragment();
 frag.setArguments(bundle);
 FragmentTransaction ft =getSupportFragmentManager().beginTransaction();
 ft.add(R.id.container, NotificationsFragment.getInstance(null, id)).addToBackStack(null).commit();

基本上,您没有将 Notifications Fragment 添加到 backstack,这就是为什么单击返回时会出现 MainActivity 的原因。