Android 没有适配器连接到viewpager2
我一直在尝试在kotlin中实现viewpager2,但我不明白为什么会出现错误,说没有适配器连接到recycle view 这是我的MainActivity.kt:Android 没有适配器连接到viewpager2,android,kotlin,android-viewpager2,Android,Kotlin,Android Viewpager2,我一直在尝试在kotlin中实现viewpager2,但我不明白为什么会出现错误,说没有适配器连接到recycle view 这是我的MainActivity.kt: class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { s
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()
}
这是我的片段2.kt::
class Fragment2 : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_2, container, false)
}
}
有人能帮我弄清楚我做错了什么吗。
提前感谢:)问题是您混合了两种方法来膨胀活动的视图,因此视图没有正确膨胀。要解决您的问题,请更换:
setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
与
binding=DataBindingUtil.setContentView(this,R.layout.activity\u 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()
setContentView(R.layout.activity\u main)
val viewpager2=findViewById(R.id.viewpager2)
val tabLayout=findViewById(R.id.tabLayout)
viewpager2.adapter=viewpager2适配器(此)
TabLayoutMediator(tabLayout,viewpager2){
选项卡,位置->
tab.text=“对象${(位置+1)}”
}附(
即使您保持数据绑定,您的应用程序也可以使用上述代码,但当然,使用数据绑定并通过
绑定
实例访问视图要比findViewById
舒服得多。问题是您混合了两种膨胀活动视图的方法,因此,视图没有适当地膨胀。要解决您的问题,请更换:
setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
与
binding=DataBindingUtil.setContentView(this,R.layout.activity\u 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()
setContentView(R.layout.activity\u main)
val viewpager2=findViewById(R.id.viewpager2)
val tabLayout=findViewById(R.id.tabLayout)
viewpager2.adapter=viewpager2适配器(此)
TabLayoutMediator(tabLayout,viewpager2){
选项卡,位置->
tab.text=“对象${(位置+1)}”
}附(
即使您保留了数据绑定,您的应用程序也可以使用上面的代码,但当然,使用数据绑定并通过
绑定
实例访问视图要比findViewById
舒服得多。我认为您在主活动中没有正确使用视图绑定。
在setContentView中,应该使用binding.root而不是R.layout.activity\u 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()
}
我认为您在主要活动中没有正确使用视图绑定。 在setContentView中,应该使用binding.root而不是R.layout.activity\u 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()
}