小编Den*_*815的帖子

在Kotlin中的片段中调用setSupportActionBar时出错

我正在尝试在片段中设置工具栏。

尽管Google Developer文档已更新为包括Kotlin代码(请参阅本页):

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_my)
    // Note that the Toolbar defined in the layout has the id "my_toolbar"
    setSupportActionBar(findViewById(R.id.my_toolbar))
Run Code Online (Sandbox Code Playgroud)

它与活动(而不是片段)中工具栏的设置有关。

我发现这则SO帖子表明您不能只在片段中调用setSupportActionBar。报价:

片段没有这样的方法setSupportActionBar()。ActionBar是Activity的属性,因此要将工具栏设置为actionBar,您的活动应从ActionBarActivity扩展,然后可以在Fragment中调用:

...

如果您使用的是AppCompatActivity:

((AppCompatActivity)getActivity()).setSupportActionBar(mToolbar);
Run Code Online (Sandbox Code Playgroud)

但是,上面给出的代码在Java中。

在Kotlin中我怎么称呼它?

android-fragments kotlin android-toolbar

2
推荐指数
1
解决办法
4697
查看次数

使用导航在工具栏菜单项中的片段之间传递数据-Kotlin

我已经使用导航架构组件设置了我的应用。从一个片段导航到下一个片段可以正常工作。但是,我一直试图在该导航流中传递数据。

按照Navigation codelab应用程序的结构,我使用下面的代码在菜单项上单击从一个片段导航到另一个片段:

MainActivity.kt

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return NavigationUI.onNavDestinationSelected(item,
        Navigation.findNavController(this, R.id.nav_host_fragment))
        || super.onOptionsItemSelected(item)
}
Run Code Online (Sandbox Code Playgroud)

我尝试通过如下修改代码将包分发给这里。Android Studio不会检测到任何错误,但是当我尝试执行菜单项单击时,我的应用程序崩溃了。请注意,我R.id.menu_edit作为参数传入,findNavController因为否则会得到'没有传递参数'viewId'构建错误的值-但我认为您通常会在不传递任何内容的情况下调用它。

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item?.itemId) {
        R.id.menu_song_edit -> {
            val songBundle = Bundle()
            songBundle.putString("titleArg", song_title.toString())
            this.findNavController(R.id.menu_song_edit).navigate(R.id.goto_songedit, songBundle) // *** this is line 96 where it crashes per the log ***
            return true
        }
        else -> return NavigationUI.onNavDestinationSelected(item,
                Navigation.findNavController(this, R.id.nav_host_fragment))
                || super.onOptionsItemSelected(item)
    }
}
Run Code Online (Sandbox Code Playgroud)

从下面的崩溃日志。找不到NavController?

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.projects.arise.mytestapp, PID: 1162 …
Run Code Online (Sandbox Code Playgroud)

navigation parameter-passing android-fragments kotlin android-toolbar

2
推荐指数
1
解决办法
1323
查看次数