如何用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)
}
}
答案 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
中为您封装。
您可以使用自动填充功能找到有关可以使用的可能方法的更多信息。