首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在片段中调用setSupportActionBar

在片段中调用setSupportActionBar
EN

Stack Overflow用户
提问于 2018-04-11 17:23:40
回答 4查看 8.2K关注 0票数 5

如何用kotlin语言在片段中调用setSupportActionBar。我有一个带有导航抽屉的mainActivity。当我单击导航抽屉的第一项时,它应该会打开一个notesFragment。我想为toolBar设置一个notesFragment。当我尝试使用AppCompatActivity().setSupportActionBar(toolbar_top)时,当我单击导航抽屉中的第一项时,应用程序就会崩溃。

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'android.view.Window$Callback android.view.Window.getCallback()‘

代码语言:javascript
复制
class notesFragment:Fragment(){
    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        AppCompatActivity().setSupportActionBar(toolbar_top)
        AppCompatActivity().getSupportActionBar()!!.setDisplayShowTitleEnabled(false)
        fragments()

        AppCompatActivity().getSupportActionBar()!!.setDisplayHomeAsUpEnabled(true)

        return inflater!!.inflate(R.layout.main_fragment,null)
    }

    fun fragments() {
        var tabLayout=tab
        var viewPager=viewPager
        var adapter=viewPagerAdapterMainActivity(AppCompatActivity().supportFragmentManager)
        adapter.addFragment(firstFragment(),"first")
        adapter.addFragment(secondFragment(),"second")
        adapter.addFragment(thirdFragment(),"third")

        viewPager.adapter=adapter
        tabLayout.setupWithViewPager(viewPager)
    }

}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-04-11 19:10:25

在使用Kotlin时,可以尝试将活动转换为AppCompatActivity,然后访问支持操作栏:

代码语言:javascript
复制
(activity as AppCompatActivity).supportActionBar

请注意,只有当宿主活动扩展AppCompatActivity时,这才能工作。

票数 11
EN

Stack Overflow用户

发布于 2018-04-11 18:58:24

AppCompatActivity文档声明getSupportActionBar()是一个实例方法。通过执行AppCompatActivity().setSupportActionBar(toolbar),您可以调用构造函数,而不将引用分配给变量,然后期望该实例调用该方法,类似于静态方法。这不是它的工作方式。现在,您应该开始看到,通过您正在做的事情,您没有引用您的主机活动,因此尝试设置工具栏将无法工作,即使语法是正确的。

至于片段,您可以通过它的activity成员获得宿主活动实例。没有activity.supportActionBar,因为它已被封装在activity.actionBar中。

您可以使用“自动完成”来更多地了解可以使用的可能方法。

票数 1
EN

Stack Overflow用户

发布于 2022-09-06 05:45:20

尝尝这个!

代码语言:javascript
复制
if (activity is AppCompatActivity) {
    (activity as AppCompatActivity).setSupportActionBar(binding.tbNavHolder)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49781110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档