使用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
相关产品推荐
相关产品推荐

