如何用kotlin语言在片段中调用setSupportActionBar。我有一个带有导航抽屉的mainActivity。当我单击导航抽屉的第一项时,它应该会打开一个notesFragment。我想为toolBar设置一个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)
}
}发布于 2018-04-11 19:10:25
在使用Kotlin时,可以尝试将活动转换为AppCompatActivity,然后访问支持操作栏:
(activity as AppCompatActivity).supportActionBar请注意,只有当宿主活动扩展AppCompatActivity时,这才能工作。
发布于 2018-04-11 18:58:24
AppCompatActivity文档声明getSupportActionBar()是一个实例方法。通过执行AppCompatActivity().setSupportActionBar(toolbar),您可以调用构造函数,而不将引用分配给变量,然后期望该实例调用该方法,类似于静态方法。这不是它的工作方式。现在,您应该开始看到,通过您正在做的事情,您没有引用您的主机活动,因此尝试设置工具栏将无法工作,即使语法是正确的。
至于片段,您可以通过它的activity成员获得宿主活动实例。没有activity.supportActionBar,因为它已被封装在activity.actionBar中。
您可以使用“自动完成”来更多地了解可以使用的可能方法。
发布于 2022-09-06 05:45:20
尝尝这个!
if (activity is AppCompatActivity) {
(activity as AppCompatActivity).setSupportActionBar(binding.tbNavHolder)
}https://stackoverflow.com/questions/49781110
复制相似问题