没有适配器连接到 viewpager2
No adapter attached to viewpager2
我一直在尝试在 kotlin 中实现 viewpager2,但我不明白为什么我会收到一条错误消息,提示没有适配器附加到回收视图
这是我的 MainActivity.kt:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
binding.viewpager2.adapter = Viewpager2Adapter(this)
TabLayoutMediator(binding.tabLayout , binding.viewpager2){
tab, position ->
tab.text = "OBJECT ${(position + 1)}"
}.attach()
}
}
下面是viewpager2Adapter.kt::
class Viewpager2Adapter(fa : FragmentActivity): FragmentStateAdapter(fa) {
override fun getItemCount(): Int = 3
override fun createFragment(position: Int): Fragment= Fragment2()
}
这是我的 fragment2.kt::
class Fragment2 : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_2, container, false)
}
}
有人可以帮我弄清楚我做错了什么吗?
提前谢谢你:)
问题是您混合了 2 种扩充 activity 视图的方法,因此视图未正确扩充。要解决您的问题,请替换:
setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
和
binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
你的代码应该可以工作。以上是实现数据绑定时应用的常规方法。如果您不使用数据绑定,代码将如下所示:
setContentView(R.layout.activity_main)
val viewpager2 = findViewById<ViewPager2>(R.id. viewpager2)
val tabLayout = findViewById<TabLayout>(R.id.tabLayout)
viewpager2.adapter = Viewpager2Adapter(this)
TabLayoutMediator(tabLayout , viewpager2){
tab, position ->
tab.text = "OBJECT ${(position + 1)}"
}.attach()
即使您保留数据绑定,您的应用程序也可以使用上述代码,但当然,与 findViewById
相比,通过 binding
实例使用数据绑定和访问视图要舒适得多。
我认为您没有在 MainActivity 中正确使用视图绑定。
在 setContentView 你应该有 binding.root 而不是 R.layout.activity_main
这是 MainActivity 中 onCreate 函数的代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
viewpager2Adapter = Viewpager2Adapter(this)
viewPager2 = binding.viewpager2
tabLayout = binding.tabLayout
viewPager2.adapter = viewpager2Adapter
TabLayoutMediator(tabLayout, viewPager2){
tab, position ->
tab.text = "OBJECT ${(position + 1)}"
}.attach()
}
我一直在尝试在 kotlin 中实现 viewpager2,但我不明白为什么我会收到一条错误消息,提示没有适配器附加到回收视图 这是我的 MainActivity.kt:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
binding.viewpager2.adapter = Viewpager2Adapter(this)
TabLayoutMediator(binding.tabLayout , binding.viewpager2){
tab, position ->
tab.text = "OBJECT ${(position + 1)}"
}.attach()
}
}
下面是viewpager2Adapter.kt::
class Viewpager2Adapter(fa : FragmentActivity): FragmentStateAdapter(fa) {
override fun getItemCount(): Int = 3
override fun createFragment(position: Int): Fragment= Fragment2()
}
这是我的 fragment2.kt::
class Fragment2 : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_2, container, false)
}
}
有人可以帮我弄清楚我做错了什么吗? 提前谢谢你:)
问题是您混合了 2 种扩充 activity 视图的方法,因此视图未正确扩充。要解决您的问题,请替换:
setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
和
binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
你的代码应该可以工作。以上是实现数据绑定时应用的常规方法。如果您不使用数据绑定,代码将如下所示:
setContentView(R.layout.activity_main)
val viewpager2 = findViewById<ViewPager2>(R.id. viewpager2)
val tabLayout = findViewById<TabLayout>(R.id.tabLayout)
viewpager2.adapter = Viewpager2Adapter(this)
TabLayoutMediator(tabLayout , viewpager2){
tab, position ->
tab.text = "OBJECT ${(position + 1)}"
}.attach()
即使您保留数据绑定,您的应用程序也可以使用上述代码,但当然,与 findViewById
相比,通过 binding
实例使用数据绑定和访问视图要舒适得多。
我认为您没有在 MainActivity 中正确使用视图绑定。 在 setContentView 你应该有 binding.root 而不是 R.layout.activity_main
这是 MainActivity 中 onCreate 函数的代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
viewpager2Adapter = Viewpager2Adapter(this)
viewPager2 = binding.viewpager2
tabLayout = binding.tabLayout
viewPager2.adapter = viewpager2Adapter
TabLayoutMediator(tabLayout, viewPager2){
tab, position ->
tab.text = "OBJECT ${(position + 1)}"
}.attach()
}