当前位置: 首页 > 知识库问答 >
问题:

Android导航-弹出返回堆栈时移除操作栏返回按钮

姜学海
2023-03-14

我想做的是

我正在使用Android导航组件来处理我的应用程序中的导航。在这个例子中,我有两个屏幕,屏幕A和屏幕B。我希望用户能够单击屏幕A中的按钮,并能够导航到屏幕B;然后被阻止回到前一个屏幕(屏幕A)。

问题所在

    null
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/nav_graph"
    app:startDestination="@id/screen_a">
    <fragment
        android:id="@+id/screen_a"
        android:name="com.example.conditionalnavigation.AFragment"
        android:label="screen A">
        <action
            android:id="@+id/action_AFragment_to_BFragment"
            app:destination="@id/screen_b"
            app:launchSingleTop="true"
            app:popUpTo="@id/screen_a"
            app:popUpToInclusive="true" />
    </fragment>
    <fragment
        android:id="@+id/screen_b"
        android:name="com.example.conditionalnavigation.BFragment"
        android:label="screen B" />
</navigation>

MainActivity--它充当我的单个活动navhost。

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
        val navController = this.findNavController(R.id.myNavHostFragment)

        NavigationUI.setupActionBarWithNavController(this, navController)
    }

    override fun onSupportNavigateUp(): Boolean {
        val navController = this.findNavController(R.id.myNavHostFragment)
        return navController.navigateUp()
    }
}

共有1个答案

古凌
2023-03-14

在您的活动课中添加以下成员(在Kotlin中):

private lateinit var appBarConfiguration: AppBarConfiguration

在onCreate方法内部添加以下行:

....
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
...
...
appBarConfiguration = AppBarConfiguration(
            setOf([**ID of the fragment layout you want without back button**],                
            ), drawerLayout
        )

setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)

    ....

这样,您的片段将是根片段,后退按钮将被删除。希望能有所帮助。

 类似资料:
  • 我在开发一个Android应用程序。我有一个处于选项卡导航模式的actionbar和三个调用frameview容器中要替换的片段的选项卡。 我的问题是:如果用户在一个选项卡中生成一个backstack,然后切换到另一个选项卡,如果在这种状态下按下back按钮--那么backstack会弹出,但选项卡没有改变,这导致重叠的片段(属于Tab1的backstack片段会弹出/添加,但Tab2仍然被选中,

  • 我有以下问题: 到此: 使用:

  • 在我的舱单中: 主要活动

  • 问题内容: 在C语言中,当我从函数返回堆栈创建的变量的指针时,在函数返回后内存将被丢弃,从而使指针无法取消引用。但是在Go中,编译器没有给我任何错误。这是否意味着这样做是安全的? 问题答案: 是的,这是安全的,并且是Go编程中的常规模式。Go使用转义分析来移动带有指针的所有值,这些指针会自动将栈转义到堆。您无需担心在何处分配值。 从Go常见问题解答中:“我如何知道是在堆还是在堆栈上分配了变量?”

  • 我已经从连接到NavController的导航抽屉中导航到了DialogFragment。但当我导航到另一个目标时,我已经将弹出窗口设置为包含对话框片段,但它并没有清除堆栈。如何清除堆栈? AM从LogoutDialog调用此方法 我只使用片段和一个活动。 这是我导航图的一部分

  • 因此,我构建了一个应用程序,其中包含一些主页作为顶级目标片段。用户可以在主页(一、二、三等)中单击以调出更多详细信息片段(page_one_item1_details、page_two_item3_details等)。这样做时,汉堡按钮会像预期的那样变成向后箭头。 如果我单击Android后退按钮,应用程序将按预期返回主页片段,但如果我单击顶部后退按钮(代替汉堡包),它会弹出抽屉而不是返回。有人能