Android 没有适配器连接到viewpager2

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

我一直在尝试在kotlin中实现viewpager2,但我不明白为什么会出现错误,说没有适配器连接到recycle view 这是我的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()

}
这是我的片段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()
}