我有一个类似Android Studios的应用程序导航抽屉活动:
我的活动使用Android架构导航组件
navController.navigate(R.id.myCorrespondingFragment)
到目前为止,一切正常。返回时问题开始:
让我们想象我从“家”——片段甲——导航
Android Studio示例正确运行:C-
我的实现没有:它只是弹出后台C-
我该怎么弥补?
缩小主布局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout android:id="@+id/drawerLayout" >
<LinearLayout android:orientation="vertical" >
<androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" />
<fragment
android:id="@+id/container"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph"
/>
</LinearLayout>
<fragment
android:name="com.company.drawer.DrawerFragment"
android:layout_gravity="start"
/>
</androidx.drawerlayout.widget.DrawerLayout>
导航图:
<?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/navigation_graph"
app:startDestination="@id/doorFragment"
>
<fragment
android:id="@+id/doorFragment"
android:name="com.company.door.DoorFragment"
android:label="@string/shared_empty"
/>
<fragment
android:id="@+id/historyFragment"
android:name="com.company.history.HistoryFragment"
android:label="@string/history"
/>
<fragment
android:id="@+id/settingsFragment"
android:name="com.company.settings.SettingsFragment"
android:label="@string/settings"
/>
</navigation>
与我的主要活动onCreate相关的所有导航:
setSupportActionBar(toolbar)
val navController = (supportFragmentManager.findFragmentById(R.id.container) as NavHostFragment).navController
toolbar.setupWithNavController(navController, AppBarConfiguration(
listOf(R.id.doorFragment, R.id.historyFragment, R.id.settingsFragment)
, drawerLayout
))
您可以使用全局操作,这样您就不必为片段导航的每个片段添加操作,而只需为每个片段目标添加操作。这在XML中看起来像这样:
<action android:id="@+id/action_global_doorFragment"
app:destination="@id/doorFragment"
app:popUpTo="@id/@id/doorFragment"
app:restoreState="true"
app:popUpToSaveState="true" />
<action android:id="@+id/action_global_historyFragment"
app:destination="@id/historyFragment"
app:popUpTo="@id/@id/doorFragment"
app:restoreState="true"
app:popUpToSaveState="true" />
<action android:id="@+id/action_global_settingsFragment"
app:destination="@id/historyFragment"
app:popUpTo="@id/@id/doorFragment"
app:restoreState="true"
app:popUpToSaveState="true" />
请注意,我总是将您的开始目标用于弹出窗口,并保存Backback状态。对于您的用例,您不一定需要后者(restoreState和poputsavestate),但当您有多个片段用于单个抽屉条目时,您可能希望以后使用它。这将使您获得与当前标准抽屉集成相同的行为。
下面是一个简单的示例,介绍如何使用全局操作转到设置片段。(文档还解释了如何将全局操作与SafeArgs-Gradle插件结合使用,这可能是更好的方法。)
navController.navigate(R.id.action_global_settingsFragment)
如果您不希望每个目的地都有额外的操作,并且您的抽屉菜单项与其目的地具有相同的id,您也可以像这样以编程方式执行此操作:
override fun onNavigationItemSelected(item: MenuItem): Boolean {
navController.navigate(item.itemId, null, navOptions {
restoreState = true
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
})
return true
}
你可以这样试试
<fragment
android:id="@+id/fragmentA"
android:name="com.package.FragmentA"
android:label="Fragment A">
<action
android:id="@+id/action_fragmentA_to_fragmentB"
app:destination="@id/fragmentB"
app:popUpTo="@id/fragmentB"
app:popUpToInclusive="true / false" />
</fragment>
我有一个在几个活动之间过渡的导航抽屉。在每个活动中,我都有一个基础片段,它可能启动其他片段。我希望导航抽屉切换图标显示时,我在基础片段,但当我添加另一个片段,我需要显示后箭头。 我一直在遵循riwnodennyk在的示例:使用片段时在Android导航抽屉图像和上插入符号之间切换 但这对我不起作用。箭头确实会出现,但我无法单击它。当点击它时,什么也不会发生。 非碱基片段中的OptionsMenuL
有人能告诉我如何创建活动到这个主要活动,导航抽屉将看到在所有他们?我需要使用这个特定的MainActivity代码。我不需要使用碎片,只要3个简单的活动将添加到这个抽屉。 NavDrawer布局:
我正在将新的Jetpack Android导航与抽屉布局结合使用。当在抽屉XML中使用相同的ID并结合导航图中的片段时,一切都按预期工作。我设置了所有内容: 我现在还想触发自定义操作/代码,而不是在单击抽屉菜单中的项目时执行片段事务。我有一个菜单,单击“注销”时想注销用户:
我实现了双抽屉布局。我还建立了一个ActionBarDrawerToggle。 我的问题是当我点击主页按钮时,我的左抽屉打开并播放动画。打开时我的右抽屉也显示抽屉打开动画。这会导致与主页图标奇怪的同步问题,即使使用mDrawerToggle.sync状态(); 我要做的是拦截打开左侧抽屉的home button click事件,以便测试哪个抽屉打开,然后适当地关闭那个抽屉。有没有办法在主页图标上设
我是android新手。我有一个关于Android导航抽屉的问题。我在我的应用程序中加入了导航抽屉,一切都很顺利,但我想知道是否有人能帮我在导航抽屉列表中获得惰性动画。 图像的来源。 非常感谢。
问题内容: 我在使用Navigation Drawer时遇到问题,它太慢了,我要寻找的解决方案是先关闭抽屉,然后显示活动,但它不起作用,肯定是我遗漏了一些东西。 问题答案: 您可以通过这种方式来避免抽屉滞后,更改 onItemClick : 编辑: 首选方式应该是在DrawerLayout上设置DrawerListener,然后 像这样设置片段: