Android studio Kotlin AddOnPageChangeListener不工作

Android studio Kotlin AddOnPageChangeListener不工作,android-studio,kotlin,android-viewpager,listener,Android Studio,Kotlin,Android Viewpager,Listener,我想用适配器连接一个viewPager(如下所示:viewPager.addOnPageChangeListener()),但是pageChangeListener的字母变成红色,好像它不是一个有效的代码……我做错了什么??这里是一个截图: [1] : 背景:我目前正在制作一个游戏,其中有一些片段,你可以选择你的游戏卡。我需要pageChangeListener来更改这些卡片的图片。也许还有别的办法,但我不知道怎么做 package com.suffv1 import android.os.B

我想用适配器连接一个viewPager(如下所示:viewPager.addOnPageChangeListener()),但是pageChangeListener的字母变成红色,好像它不是一个有效的代码……我做错了什么??这里是一个截图: [1] :

背景:我目前正在制作一个游戏,其中有一些片段,你可以选择你的游戏卡。我需要pageChangeListener来更改这些卡片的图片。也许还有别的办法,但我不知道怎么做

package com.suffv1

import android.os.Bundle
import androidx.appcompat.app.ActionBar
import androidx.appcompat.app.AppCompatActivity
import androidx.viewpager.widget.ViewPager
import com.example.suff_02.Adapter2
import com.example.suff_02.R
import com.example.suff_02.kartenmodell

import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity(){

    private lateinit var actionbar: ActionBar

    private lateinit var liste: ArrayList<kartenmodell>
    private lateinit var myAdapter: Adapter2

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        super.setContentView(R.layout.activity_main)

        actionbar = this.supportActionBar!!

        loadCards()

        viewpager2.addOnPageChangeListener(object: ViewPager.OnPageChangeListener{

            override fun onPageScrolled(
                position: Int,
                positionOffset: Float,
                positionOffsetPixels: Int
            ) {
                val title = liste[position].KartenImage
                actionbar.title = title
            }

        })

    }

    private fun loadCards() {
        liste = ArrayList()

        liste.add(kartenmodell(R.drawable.bier_radler_klein_level_1))
        liste.add(kartenmodell(R.drawable.bier_hopfentrunk_klein_level_1))
        liste.add(kartenmodell(R.drawable.bier_butt_light_klein_level_1))
        liste.add(kartenmodell(R.drawable.bier_becks_klein_level_1))
        liste.add(kartenmodell(R.drawable.bier_tyskie_klein_level_1))

        myAdapter = Adapter2(this, liste)

        viewpager2.adapter = myAdapter

        viewpager2.setPadding(100, 0, 100, 0)
    }
}


  
package com.v1
导入android.os.Bundle
导入androidx.appcompat.app.ActionBar
导入androidx.appcompat.app.appcompat活动
导入androidx.viewpager.widget.viewpager
导入com.example.suff_02.Adapter2
导入com.example.suff_02.R
导入com.example.suff_02.kartenmodell
导入kotlinx.android.synthetic.main.activity\u main*
类MainActivity:AppCompatActivity(){
私有lateinit var actionbar:actionbar
私有lateinit变量列表:ArrayList
私有lateinit var myAdapter:Adapter2
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
super.setContentView(R.layout.activity\u main)
actionbar=这个.supportActionBar!!
加载卡()
viewpager2.addOnPageChangeListener(对象:ViewPager.OnPageChangeListener{
覆盖已滚动的页面(
职位:Int,
位置偏移:浮动,
位置偏移像素:Int
) {
val title=liste[position].KartenImage
actionbar.title=标题
}
})
}
私人娱乐卡(){
liste=ArrayList()
列表添加(kartenmodell(R.drawable.bier_radler_klein_level_1))
列表添加(kartenmodell(R.drawable.bier_hopfentrunk_klein_level_1))
列表添加(kartenmodell(R.drawable.bier_butt_light_klein_level_1))
列表添加(kartenmodell(R.drawable.bier_becks_klein_level_1))
列表添加(kartenmodell(R.drawable.bier_tyskie_klein_level_1))
myAdapter=Adapter2(此,列表)
viewpager2.adapter=myAdapter
viewpager2.setPadding(100,0,100,0)
}
}

要创建一个
AddOnPageChangeListener()
,您可以按照以下步骤执行:

//See how, you have to use object to create an Object of the interface OnPageChangeListener.
//This is how you do for other listeners/interfaces/class as well when you've to implement its member functions instead of new in java.
viewPager.addOnPageChangeListener(object: ViewPager.OnPageChangeListener{
    override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
        TODO("Not yet implemented")
    }

    override fun onPageSelected(position: Int) {
        TODO("Not yet implemented")
    }

   override fun onPageScrollStateChanged(state: Int) {
       TODO("Not yet implemented")
   }

})
但是,在Kotlin中,可以将Kotlin函数用作

//This is for onPageSelected only.
viewPager.onPageChangeListener{ position: Int ->
    //This position is the selected Page's position
}

看起来您使用的是ViewPager2,而不是原始的Viewpager,并且ViewPager2没有页面更改侦听器,而是页面更改回调

因此,当页面发生更改时,您使用了错误的方法获得通知

而是做一些类似的事情

var myPageChangeCallback = object : ViewPager2.OnPageChangeCallback() {
  override fun onPageSelected(position: Int) {
    Toast.makeText(this@MainActivity, "Selected position: ${position}", 
      Toast.LENGTH_SHORT).show()
  }
}

viewpager.registerOnPageChangeCallback(myPageChangeCallback)


尽管在架构上,很多时候使用
OnPageChangeCallback
是一种不好的形式,因为您可能会打破片段的封装思想,在选择页面(片段)时,最好使用片段的生命周期状态更改
recovered
。e、 g.将代码放入Fragments
onResume
方法中


虽然在设置actionbar标题的这种情况下,在架构上使用
OnPageChangeCallback

可能是可行的,但人们可以为您提供答案,以显示代码的相关部分,或者最好是一个最小的可复制示例,我建议您阅读添加的代码和更多上下文,第一次在这里发帖时,我有完全相同的代码,除了。addOnPageChangeListener是红色并显示错误之外,其他一切都是正确的