android-studio - Kotlin AddOnPageChangeListener 不起作用

标签 android-studio kotlin android-viewpager listener

我想用一个适配器连接一个 viewPager(像这样:viewPager.addOnPageChangeListener()),但是 pageChangeListener 的字母只是变成了红色,就像它不是一个有效的代码......我做错了什么?这是一个屏幕截图:
[1]:/image/IOYJY.png
背景信息:我目前正在开发一款带有一些片段的游戏,您可以在其中选择游戏卡。我需要 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)
    }
}


  

最佳答案

看起来您使用的是 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 是不好的形式因为您可能打破了 Fragment 的封装思想,最好使用生命周期状态更改为 Resumed当页面(Fragment)被选中时,Fragment 的作用。例如将代码放入 Fragments onResume方法。
尽管在这种设置操作栏标题的情况下,在架构上使用 OnPageChangeCallback 可能是可以的

关于android-studio - Kotlin AddOnPageChangeListener 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65688906/

相关文章:

android - 避免位图被回收android

java - 我想在 View 寻呼机、选项卡式 Activity Android 中显示 3 个不同选项卡的 3 个不同 fragment

android-studio - android.useAndroidX 属性未启用,为什么要启用?

android - 如何在Android Studio中查看支持库文档?

Android Studio - 错误 :Program type already present

kotlin - 如何在使用当前父 Scope 的 `suspend fun` 中启动 Kotlin 协程?

java - @GlideOption 添加/扩展 RequestBuilder 来自定义监听器并实现 Java 8 中的功能方法

java - 忽略 java 类文件

android - 如何解决 androidx.appcompat.widget.SearchView 无法转换为 android.widget.SearchView

android - 使用 View 寻呼机滑动 4 个图像非常慢