You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ViewPager2实现滑动视图时遭遇类型不匹配错误求助

问题解决:ViewPager2 Adapter实例化时的类型不匹配错误

错误根源

你在MainActivity中创建图片资源列表时,误用了listOf的语法:

var image = listOf {
    R.drawable.illustration
    R.drawable.pexelsphoto
    R.drawable.preview
    R.drawable.wallpaper
    R.drawable.yh
}

这里的大括号{}会被Kotlin识别为单个lambda表达式,最终生成的是List<() -> Int>(仅包含一个返回Int的函数的列表),但你的ViewPagerAdapter需要的是存储资源ID的List<Int>,这直接导致了类型不匹配。

修正方案

1. 修正MainActivity的列表创建

把大括号替换为括号,用逗号分隔元素,正确创建Int类型的资源ID列表:

val image = listOf(
    R.drawable.illustration,
    R.drawable.pexelsphoto,
    R.drawable.preview,
    R.drawable.wallpaper,
    R.drawable.yh
)

2. 修正Adapter的视图绑定代码

你的onCreateViewHolder方法中,bind(view)调用存在问题,必须明确使用布局绑定类的静态bind方法,否则会找不到对应方法:

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewPagerViewHolder {
    val view = LayoutInflater.from(parent.context).inflate(R.layout.item_view_pager, parent, false)
    return ViewPagerViewHolder(ItemViewPagerBinding.bind(view))
}

完整修正代码

ViewPagerAdapter

class ViewPagerAdapter(var images: List<Int>):
    RecyclerView.Adapter<ViewPagerAdapter.ViewPagerViewHolder>()
{
    inner class ViewPagerViewHolder(val binding: ItemViewPagerBinding): RecyclerView.ViewHolder(binding.root)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewPagerViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_view_pager, parent, false)
        return ViewPagerViewHolder(ItemViewPagerBinding.bind(view))
    }

    override fun onBindViewHolder(holder: ViewPagerViewHolder, position: Int) {
        val curImage = images[position]
        holder.binding.imgview.setImageResource(curImage)
    }

    override fun getItemCount(): Int {
        return images.size
    }
}

MainActivity

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        binding = ActivityMainBinding.inflate(layoutInflater)
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        val image = listOf(
            R.drawable.illustration,
            R.drawable.pexelsphoto,
            R.drawable.preview,
            R.drawable.wallpaper,
            R.drawable.yh
        )

        val adapter = ViewPagerAdapter(image)
        binding.viewPager.adapter = adapter

        binding.viewPager.orientation = ViewPager2.ORIENTATION_VERTICAL
    }
}

内容的提问来源于stack exchange,提问作者Zephyr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:00:56