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

Fragment中为RecyclerView实现OnItemClickListener报错如何解决

问题原因

RecyclerView 本身未内置 setOnItemClickListener() API,该方法是 AdapterView 子类(如 ListView、GridView)的独有方法,所以你调用时会出现标红报错。

解决方案

需要自定义点击回调接口,在 Adapter 中绑定点击事件触发回调,再在 Fragment 中接收回调处理跳转逻辑,修改代码如下:

第一步:修改 RecycleViewWorldAdapter 类

public class RecycleViewWorldAdapter extends RecyclerView.Adapter<RecycleViewWorldAdapter.MyViewHolder> {

    private ArrayList<WorldDataModel> worldDataModelArrayList;
    // 自定义点击回调接口
    public interface OnItemClickListener {
        void onItemClick(int position);
    }
    private OnItemClickListener mListener;

    // 提供设置回调的公共方法
    public void setOnItemClickListener(OnItemClickListener listener) {
        mListener = listener;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView textViewLocationName, textViewPlacesName;
        public ImageView imageOnCard;

        public MyViewHolder(View itemView) {
            super(itemView);
            textViewLocationName = (TextView) itemView.findViewById(R.id.location_name);
            textViewPlacesName = (TextView) itemView.findViewById(R.id.places_name);
            imageOnCard = (ImageView) itemView.findViewById(R.id.image_on_cardview);

            // 给item根布局设置点击事件
            itemView.setOnClickListener(v -> {
                if (mListener != null) {
                    int position = getAdapterPosition();
                    if (position != RecyclerView.NO_POSITION) {
                        mListener.onItemClick(position);
                    }
                }
            });
        }
    }

    // 其余原有代码保持不变
    public RecycleViewWorldAdapter(ArrayList<WorldDataModel> worldDataModelArrayList) {
        this.worldDataModelArrayList = worldDataModelArrayList;
    }

    @Override
    public MyViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item_layout, parent, false);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(RecycleViewWorldAdapter.MyViewHolder holder, int position) {
        WorldDataModel worldDataModel = worldDataModelArrayList.get(position);
        holder.textViewPlacesName.setText(worldDataModel.getName());
        holder.textViewLocationName.setText(worldDataModel.getAddress());
        holder.imageOnCard.setImageDrawable(worldDataModel.getImageThumbnail());
    }

    @Override
    public int getItemCount() {
        return worldDataModelArrayList.size();
    }
}

第二步:修改 MountainFragment 类

删除原有 recyclerView.setOnItemClickListener(...) 整段代码,替换为给 Adapter 设置自定义回调的逻辑:

// 原有设置Adapter的代码保持不变
RecycleViewWorldAdapter adapter = new RecycleViewWorldAdapter(mountainArrays);
recyclerView.setAdapter(adapter);

// 替换原有点击事件代码
adapter.setOnItemClickListener(position -> {
    Intent intent = new Intent(getActivity(), DetailsActivity.class);
    intent.putExtra("category", LOCATION_TYPE);
    intent.putExtra("location", position + 1);
    startActivity(intent);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:15:00