android - NullPointerException 在使用片段内的片段创建视图 Kotlin
问题描述
当我启动包含带有 TabLayout 的 NavigationDrawer 的活动时,它会出现一个错误报告,指出 viewPager 不能为空。这是发生错误的代码,在 viewPager.adapter = adapter ...
希望有人能告诉我如何解决这个问题。
我在想我需要一种创建这些片段的方法
class fragment_nav_home : Fragment() {
private fun setUpTabs() {
val adapter = ViewPagerAdapter(childFragmentManager)
adapter.addFragment(fragment_tab_artists(), "Artists")
adapter.addFragment(fragment_tab_agencies(), "Agencies")
viewPager.adapter = adapter
tabs.setupWithViewPager(viewPager)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setUpTabs()
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
// setUpTabs()
return inflater.inflate(R.layout.fragment_nav_home, container, false)
}
}
函数 addFragment 来自下一个 Kotlin 类
class ViewPagerAdapter(supportFragmentManager: FragmentManager) :
FragmentPagerAdapter(supportFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
private val lstFragments = ArrayList<Fragment>();
private val lstFragmentsTitles = ArrayList<String>();
override fun getCount(): Int {
return lstFragments.size
}
override fun getItem(i: Int): Fragment {
return lstFragments[i]
}
override fun getPageTitle(i: Int): CharSequence? {
return lstFragmentsTitles[i]
}
fun addFragment(fragment: Fragment, title: String) {
lstFragments.add(fragment)
lstFragmentsTitles.add(title)
}
}
解决方案
你的viewPager
变量是空的,所以你不能adapter
在它上面设置一个属性,因为null
没有那个。
你在哪里设置viewPager
?看起来您没有使用视图绑定库,因此您需要执行 aviewPager = findViewById(R.id.viewPager)
或其他操作,例如onCreateView
:
val view = inflater.inflate(R.layout.fragment_nav_home, container, false)
viewPager = view.findViewById(R.id.viewPager)
return view
或者如果您使用的是 Kotlin 合成(其中布局中的 ID 被转换为具有相同名称的变量,因此您可以直接访问视图而无需查找它们):
import kotlinx.android.synthetic.main.fragment_nav_home.*
在这种情况下ViewPager
,您的 XML 布局中需要一个 ID 为“viewPager”。
现在它为空,因为您尚未分配它,或者它不存在(如果它被自动分配)
推荐阅读
- stata - Stata 虚拟变量开始日期结束日期
- c++ - Bison if 语句 - 在解析块语句之前设置符号表
- sql - 你如何选择多个表,但只限制一个表
- json - 如果正在使用自定义类型,如何使 Yesod 成为 Key 记录?
- apache-camel - 升级到 3.7.2 后,Apache Camel 中的 FluentProducerTemplate 出现异常
- laravel - Laravel 电报机器人 sdk
- erpnext - 通过自定义脚本更新 frappe 触发字段
- grammar - BNF 语法规范
- android - XMLHttpRequest 未在 react-native Android 中触发/调用任何 [on] 回调
- javascript - 解析错误,我的类型检查器函数上缺少分号