【问题标题】:Android Navigation add to back stackAndroid导航添加到后台堆栈
【发布时间】:2020-05-07 07:48:08
【问题描述】:

我尝试使用 Android 导航组件,但后堆栈出现问题。

我有片段 A,B。要从 A 导航到 B,我写:

Navigation.findNavController(view).navigate(R.id.a_to_b)

但是如何在单击后退按钮时返回 A?

【问题讨论】:

  • 你可以check this
  • 如果你按下 android 上的后退按钮,它应该会自动处理并返回到上一个可见片段。是否要覆盖该行为?
  • 如果我点击 android 上的后退按钮没有任何反应。实际上它只是刷新当前片段

标签: android kotlin android-jetpack-navigation


【解决方案1】:

片段 A 在您的 backstack 中,因此您只需为您的按钮实现一个点击监听器,例如,使用this solution。

它提供了一个例子和一些解释:

新版本androidx.activity ver. 1.0.0-alpha07带来了一些 变化

更多解释见android官方指南:Provide custom back navigation```java public class MyFragment extends Fragment {

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // This callback will only be called when MyFragment is at least Started.
    OnBackPressedCallback callback = new OnBackPressedCallback(true /* enabled by default */) {
        @Override
        public void handleOnBackPressed() {
            // Handle the back button event
        }
    };
    requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);

编码愉快!

【讨论】:

    【解决方案2】:

    众所周知,Nav 库应该负责从后台堆栈本身进行推送和弹出操作。我花了几个小时寻找一条缺失的线路,但我认为这可能会帮助未来的谷歌员工,来自the basic sample:

    <androidx.fragment.app.FragmentContainerView
    android:id="@+id/nav_host_splash_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/launch_nav_graph"
    tools:context=".launch.SplashActivity" />
    

    如果你不设置defaultNavHost,你基本上需要自己处理backstack。这一行对于自动将片段添加到后台堆栈至关重要。

    【讨论】:

      猜你喜欢
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多