Android工具栏使用导航抽屉时出现问题

hs1ihplo  于 2023-02-20  发布在  Android
关注(0)|答案(1)|浏览(148)

1.列出项目
我正在开发一个使用导航抽屉和导航组件的应用程序,我面临着两个问题:
我把每个工具栏的标题设置在它应该在的地方,但是每次我改变片段的时候,在工具栏中,有一瞬间,我可以从片段中看到以前的名称,这就是片段名称本身。所以,它很快从MySpecificFragment变成MyFragmentName,我希望它不要发生。我甚至把标题设置在onCreateView或onViewCreated上。这无关紧要,仍然在发生。我如何决定片段的后退按钮的方向?我想创建一个后退按钮箭头的标准位置,总是相同的。但它只是回到前一个片段(这不是一个真实的的问题,但我想改善它的行为)抱歉缺乏代码,我不知道我应该显示什么,因为我违背了标准的android行为。
附言:使用android studio和Kotlin

rekjcdws

rekjcdws1#

关于第一个问题,避免在工具栏中短暂显示上一个片段名称的一种方法是在父Activity中设置工具栏标题,然后从片段的onResume()方法更新它。这可以确保在将片段推送到回栈后恢复时正确设置工具栏标题。
在您的活动中:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(toolbar)
    }

    fun setToolbarTitle(title: String) {
        supportActionBar?.title = title
    }
}

在你的片段中:

class MySpecificFragment : Fragment() {
    override fun onResume() {
        super.onResume()
        (activity as? MainActivity)?.setToolbarTitle("MySpecificFragment")
    }
}

关于第二个问题,您可以使用自定义NavController.OnDestinationChangedListener自定义后退按钮行为。在侦听器中,您可以根据当前和以前的目标设置后退按钮图标及其行为。以下是示例代码片段:

class MyNavigationController(activity: AppCompatActivity, navController: NavController) {
    init {
        navController.addOnDestinationChangedListener(
            activity, object : NavController.OnDestinationChangedListener {
                override fun onDestinationChanged(
                    controller: NavController,
                    destination: NavDestination,
                    arguments: Bundle?
                ) {
                    if (destination.id == R.id.my_fragment) {
                        activity.supportActionBar?.setDisplayHomeAsUpEnabled(false)
                    } else {
                        activity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
                        activity.supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_arrow_back)
                        activity.supportActionBar?.setHomeActionContentDescription(R.string.back)
                        activity.supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_arrow_back)
                        activity.supportActionBar?.setDisplayShowHomeEnabled(true)
                    }
                }
            })
    }
}

在这里,您可以通过设置setDisplayHomeAsUpEnabledsetHomeAsUpIndicatorsetHomeActionContentDescription,根据当前和以前的目的地调整后退按钮图标和行为。

相关问题