Java 多活动上的Android导航抽屉

Java 多活动上的Android导航抽屉,java,android,navigation-drawer,Java,Android,Navigation Drawer,是否有办法只配置一次导航抽屉,并在多个活动中显示它?为此,只需创建一个实现抽屉的BaseActivity类, 让您的所有其他活动扩展此活动。对于想要活动代码示例的人,请查看我的答案: 如果您想要一个好的过渡,我建议您:当您单击导航抽屉中的项目时,关闭导航抽屉,同时使用postdelayed和250(关闭导航抽屉所需的时间)。同时,以150毫秒的时间将主要内容的alpha设置为0。然后,当活动开始时,用250毫秒将主要内容的alpha设置为1。这是一个巨大的转变。我在谷歌IO代码中找到了它: 顺便

是否有办法只配置一次导航抽屉,并在多个活动中显示它?

为此,只需创建一个实现抽屉的BaseActivity类,
让您的所有其他活动扩展此活动。

对于想要活动代码示例的人,请查看我的答案:

如果您想要一个好的过渡,我建议您:当您单击
导航抽屉中的项目时,关闭导航抽屉,同时使用postdelayed和250(关闭
导航抽屉所需的时间)。同时,以150毫秒的时间将主要内容的alpha设置为0。然后,当活动开始时,用250毫秒将主要内容的alpha设置为1。这是一个巨大的转变。我在谷歌IO代码中找到了它:

顺便说一句,您还应该看看@Harish Godara-give的链接:它可以处理片段,但它有一个很好的方法来实现
导航抽屉

编辑

因为有些链接是死的,所以这里是我在上一个项目中用来获取动画的。这是在科特林,但它应该表明这一点。这是BaseDrawerActivity中的所有代码:

private val NAVDRAWER_LAUNCH_DELAY = 250L
private val MAIN_CONTENT_FADEOUT_DURATION = 150L
private val MAIN_CONTENT_FADEIN_DURATION = 250L
-

-

-

-


@哈里什·戈达拉:你能给我举个例子或者给我一些指导吗same@Harish戈达拉:我也在尝试同样的例子,但你能帮我一个忙吗?当我做一个测试项目时,它工作得很好,但当我将它集成到我的应用程序中时,抽屉没有打开。为什么会这样?@HarishGodara我明白了。你能告诉我,如果我有不同的活动,比如A,B,C,D,现在我在A上显示抽屉,并想导航到B,以及同一个抽屉和它的状态,而不使用碎片。我正在做一些接近这一点的事情,但我遇到了一些小但令人恼火的问题。首先,当您从导航抽屉启动新活动时,它看起来有点笨重,因为新活动在抽屉关闭的同时启动。此外,当您返回到上一个活动时,会发生短暂的标题交换。交换是从全局上下文更改为活动上下文
onDrawerClosed
,在新活动启动之前,它没有机会启动。所有事情都很顺利。但是我怎样才能为不同的儿童活动展示不同的布局呢????请提供相关信息。这是一个很好的教程。正如你所看到的,当你向下滚动时,这个问题已经解决了。这个链接现在指向404,但是我真的很好奇这个漂亮的过渡。你在这方面有什么资源吗?@dan我在上一个项目中添加了一个例子。它是用Kotlin编写的,但应该足以让您了解如何做到这一点
private var shouldAnimate:Boolean
    set(value) { intent.putExtra("animateTransition", value) }
    get() = intent.getBooleanExtra("animateTransition", false)
private fun changeDrawerItem(newClass: Class<*>) {
    runDelayed(NAVDRAWER_LAUNCH_DELAY, {
        startActivity(Intent(this, newClass).apply {
            addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
            putExtra("animateTransition", true)
            putExtra("selectedNav", selectedNavigationItem.name)
        })
        overridePendingTransition(0, 0)
    })

    mainContent.animate()?.alpha(0f)?.duration = MAIN_CONTENT_FADEOUT_DURATION
}
override fun onStart() {
    super.onStart()

    if(shouldAnimate) {
        mainContent.alpha = 0f
        mainContent.animate()?.alpha(1f)?.duration = MAIN_CONTENT_FADEIN_DURATION
    } else {
        mainContent.alpha = 1f
    }

    val selectedNav = intent.getStringExtra("selectedNav")
    if(selectedNav != null) {
        selectedNavigationItem = DrawerItem.valueOf(selectedNav)
    }
}
override fun onNewIntent(intent: Intent) {
    super.onNewIntent(intent)
    setIntent(intent)

    if(shouldAnimate) {
        overridePendingTransition(0, 0)
    }
}
override fun onResume() {
    super.onResume()
    intent.removeExtra("animateTransition")
}