在片段中调用setSupportActionBar

时间:2018-04-11 17:23:40

标签: android kotlin

如何用kotlin语言调用片段中的setSupportActionBar。  我有一个带导航抽屉的mainActivity。当我点击导航抽屉的第一项时,它应该打开一个notesFragment。我想为notesFragment设置一个toolBar。当我尝试使用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)
    }

}

3 个答案:

答案 0 :(得分:2)

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

(activity as AppCompatActivity).supportActionBar

请注意,这仅适用于您的主机活动扩展AppCompatActivity。

答案 1 :(得分:0)

activity.setSupportActionBar(toolbar)

同样在最新的支持库版本中,activity属性为可空类型,您可以使用安全调用:

activity?.setSupportActionBar(toolbar)

或双重感叹号:

activity!!.setSupportActionBar(toolbar)

答案 2 :(得分:0)

AppCompatActivity documentation表示getSupportActionBar()是一种实例方法。通过执行AppCompatActivity().setSupportActionBar(toolbar),您调用构造函数而不分配对变量的引用,然后期望该实例调用该方法,类似于静态方法。这不是它的工作原理。到现在为止你应该开始看到你正在做的事情,你没有引用你的主机活动,所以即使语法正确,尝试设置工具栏也不会有用。

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

您可以使用自动填充功能找到有关可以使用的可能方法的更多信息。