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

如何解决Android报错:不兼容的类型:SliderAdapter无法转换为Adapter

问题原因
  • 核心类型不兼容:ViewPager2 要求传入的适配器必须是 RecyclerView.Adapter 或 FragmentStateAdapter 的子类,你当前自定义的 SliderAdapter 继承的是适配旧版 ViewPager 的 PagerAdapter,类型不匹配触发报错。
  • 额外代码问题:现有 SliderAdapter 的 instantiateItem 方法错误返回了父类方法的结果,应该返回你自己inflate出来的View实例,就算用旧版ViewPager这段代码也会触发运行异常。
解决方案

二选一即可:

方案1:改用旧版ViewPager(改动最小)

  1. 将布局文件activity_on_board.xml中的androidx.viewpager2.widget.ViewPager2控件替换为androidx.viewpager.widget.ViewPager
  2. 修改OnBoardActivity的变量声明:把ViewPager2 viewPager2;改为ViewPager viewPager;,对应findViewById也匹配修改类型
  3. 修复SliderAdapter的instantiateItem返回值:将return super.instantiateItem(container, position);改为return view;

方案2:适配ViewPager2(推荐,性能更优)

重写SliderAdapter继承RecyclerView.Adapter即可,修改后代码如下:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class SliderAdapter extends RecyclerView.Adapter<SliderAdapter.SliderViewHolder> {

    Context context;
    int images[] = {
        R.drawable.interview,
        R.drawable.send,
        R.drawable.click,
        R.drawable.call
    };
    int headings [] = {
        R.string.first_title,
        R.string.second_title,
        R.string.third_title,
        R.string.fourth_title
    };
    int descriptions[] = {
        R.string.first_decs,
        R.string.second_decs,
        R.string.third_decs,
        R.string.fourth_decs
    };

    public SliderAdapter(Context context) {
        this.context = context;
    }

    @NonNull
    @Override
    public SliderViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.slides_layout, parent, false);
        return new SliderViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull SliderViewHolder holder, int position) {
        holder.imageView.setImageResource(images[position]);
        holder.heading.setText(headings[position]);
        holder.desc.setText(descriptions[position]);
    }

    @Override
    public int getItemCount() {
        return headings.length;
    }

    public class SliderViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
        TextView heading;
        TextView desc;
        public SliderViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.slider_image);
            heading = itemView.findViewById(R.id.slider_heading);
            desc = itemView.findViewById(R.id.slider_decs);
        }
    }
}

修改后OnBoardActivity代码无需改动,直接运行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:00:02