【问题标题】:Calling setSupportActionBar in a fragment在片段中调用 setSupportActionBar
【发布时间】:2018-04-11 17:23:40
【问题描述】:

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

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

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)
    }

}

【问题讨论】:

  • 您能分享一下您到目前为止所做的尝试以便我们为您提供帮助吗?

标签: android kotlin


【解决方案1】:

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

(activity as AppCompatActivity).supportActionBar

请注意,这仅在您的主机活动扩展 AppCompatActivity 时才有效。

【讨论】:

    【解决方案2】:

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

    对于片段,您可以通过其activity 成员获取托管活动实例。没有activity.supportActionBar,因为它已经为您封装在activity.actionBar 中。

    您可以使用自动完成功能来了解有关可以使用的可能方法的更多信息。

    【讨论】:

      【解决方案3】:
      activity.setSupportActionBar(toolbar)
      

      此外,在最新的支持库版本中,活动属性是可为空的类型,您可以使用安全调用:

      activity?.setSupportActionBar(toolbar)
      

      或双感叹号:

      activity!!.setSupportActionBar(toolbar)
      

      【讨论】:

      • 它给了我错误“Unresolved reference setSupportActionBar”
      • @Samer 你能发布更多细节吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多