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

Android开发中异常‘cannot be applied’适配错误求助

解决FollowingActivity被误用作Adapter的问题

嘿,别着急,这是新手刚接触Android开发很容易犯的经典错误——你把Activity(页面组件)和Adapter(列表数据适配器)搞混啦!咱们一步步拆解问题,然后解决它:

先搞懂两个报错的根源

  1. 构造方法参数不匹配:
    你代码里new FollowingActivity(...)是在实例化一个Activity类,但Activity的构造方法根本不是为ListView适配设计的!报错提示“期望类型为FollowingRow,实际传入ArrayList”,说明你应该实例化的是一个继承自ArrayAdapter/BaseAdapter的自定义Adapter类,而不是Activity。

  2. setAdapter参数类型不匹配:
    ListView的setAdapter()方法要求传入的是ListAdapter接口的实现类(比如ArrayAdapter),但你传了一个Activity对象,类型完全不搭,自然会标红报错。

具体解决方案

步骤1:创建自定义FollowingAdapter类

你需要写一个专门用于绑定ListView数据的Adapter,继承自ArrayAdapter<FollowingRow>(因为报错提示期望的是FollowingRow类型的数据):

public class FollowingAdapter extends ArrayAdapter<FollowingRow> {
    private Context mContext;
    private int mItemLayoutId;
    private List<FollowingRow> mFollowingData;

    // 构造方法,匹配你需要的参数:上下文、列表项布局id、数据列表
    public FollowingAdapter(Context context, int itemLayoutId, List<FollowingRow> followingData) {
        super(context, itemLayoutId, followingData);
        mContext = context;
        mItemLayoutId = itemLayoutId;
        mFollowingData = followingData;
    }

    // 重写getView方法,负责加载列表项布局并绑定数据
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 复用convertView优化性能
        if (convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = inflater.inflate(mItemLayoutId, parent, false);
        }

        // 获取当前位置的数据项
        FollowingRow currentFollowItem = mFollowingData.get(position);

        // 这里根据你的布局,找到控件并设置数据(示例)
        // TextView userNameTv = convertView.findViewById(R.id.tv_follow_username);
        // userNameTv.setText(currentFollowItem.getUsername());

        return convertView;
    }
}

步骤2:在FollowingActivity中正确使用Adapter

回到你的FollowingActivity里,把原来错误的代码替换成实例化自定义Adapter的代码:

// 假设这段代码在FollowingActivity的onCreate方法里
FollowingAdapter adapter = new FollowingAdapter(this, R.layout.layout_followrow, mFollowing);
mListView.setAdapter(adapter);

为什么这样改就对了?

  • 现在你实例化的是专门为ListView设计的FollowingAdapter,它的构造方法参数完全符合ArrayAdapter的要求,解决了“参数不匹配”的报错。
  • FollowingAdapter继承自ArrayAdapter,而ArrayAdapter实现了ListAdapter接口,完全符合setAdapter()方法的参数要求,第二个报错自然消失。

最后再提个醒:Activity是负责页面展示、生命周期管理的组件,而Adapter是连接数据和列表控件的“桥梁”,两者职责完全不同,以后可别再搞混啦 😊

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:42:00