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

cartAdapter中startListening()与stopListening()方法无法解析问题求助

解决调用startListening()和stopListening()时的方法找不到错误

我在调用startListening()和stopListening()时出现错误,相关代码如下:

Fragment代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_app_cart,container,false);

    recyclerView = view.findViewById(R.id.recylervieww);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

    cartmodelList = new ArrayList<>();
    cartadapt = new cartAdapter(getActivity(),cartmodelList);
    recyclerView.setAdapter(cartadapt);

    FirebaseRecyclerOptions<Cartmodel> options =
            new FirebaseRecyclerOptions.Builder<Cartmodel>()
                    .setQuery(FirebaseDatabase.getInstance().getReference().child("Cart List"), Cartmodel.class)
                    .build();

    cartadapt = new cartAdapter(options);
    recyclerView.setAdapter(cartadapt);


    return view;
}

@Override
public void onStart() {
    super.onStart();
    cartadapt.startListening();
}

@Override
public void onStop() {
    super.onStop();
    cartadapt.stopListening();
}

cartAdapter代码

public class cartAdapter extends RecyclerView.Adapter<cartAdapter.ViewHolder> {

    Context context;
    List<Cartmodel> cartmodelList;

    public cartAdapter(Context context, List<Cartmodel> cartmodelList) {
        this.context = context;
        this.cartmodelList = cartmodelList;
    }

    public cartAdapter(FirebaseRecyclerOptions<Cartmodel> options) {
    }


    @NonNull
    @Override
    public cartAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cart_singlero,parent,false));

    }

    @Override
    public void onBindViewHolder(@NonNull cartAdapter.ViewHolder holder, int position) {
        holder.productName.setText(cartmodelList.get(position).getProductName());
        holder.quantity.setText(cartmodelList.get(position).getQuantity());
        holder.totalPrice.setText(cartmodelList.get(position).getTotalPrice());
        Glide.with(holder.itemView.getContext()).load(Cartmodel.productImage()).into(holder.productImage);


    }

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

   

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView date,productName,productPrice,quantity,totalPrice;
        ImageView productImage;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            productName = itemView.findViewById(R.id.pnametext);
            quantity = itemView.findViewById(R.id.quantity);
            totalPrice = itemView.findViewById(R.id.totalprice);
            productImage = itemView.findViewById(R.id.img2);

        }
    }
}

报错信息

Cannot resolve method 'startListening' in 'cartAdapter'
Cannot resolve method 'stopListening' in 'cartAdapter'

说明:我在其他Activity中使用这两个类时未出现此类错误,请求帮助解决。


问题原因及修复方案

1. 核心问题

startListening()和stopListening()是FirebaseUI库中FirebaseRecyclerAdapter类的专属方法,你的cartAdapter当前仅继承了基础的RecyclerView.Adapter,因此无法识别这两个方法。

2. 修复步骤

修改适配器继承关系

将cartAdapter改为继承FirebaseRecyclerAdapter,同时保留原有构造方法以兼容普通列表场景:

public class cartAdapter extends FirebaseRecyclerAdapter<Cartmodel, cartAdapter.ViewHolder> {

    Context context;
    List<Cartmodel> cartmodelList;

    // 普通列表构造方法(兼容原有Activity场景)
    public cartAdapter(Context context, List<Cartmodel> cartmodelList) {
        // 传入空的Firebase查询参数避免初始化报错
        super(new FirebaseRecyclerOptions.Builder<Cartmodel>().setQuery(FirebaseDatabase.getInstance().getReference(), Cartmodel.class).build());
        this.context = context;
        this.cartmodelList = cartmodelList;
    }

    // Firebase列表构造方法(当前Fragment使用)
    public cartAdapter(FirebaseRecyclerOptions<Cartmodel> options) {
        super(options);
    }


    @NonNull
    @Override
    public cartAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cart_singlero, parent, false));
    }

    @Override
    protected void onBindViewHolder(@NonNull cartAdapter.ViewHolder holder, int position, @NonNull Cartmodel model) {
        // 直接使用Firebase传入的model对象,无需从本地list获取
        holder.productName.setText(model.getProductName());
        holder.quantity.setText(model.getQuantity());
        holder.totalPrice.setText(model.getTotalPrice());
        Glide.with(holder.itemView.getContext()).load(model.getProductImage()).into(holder.productImage);
    }

    // 区分两种场景的条目数量返回
    @Override
    public int getItemCount() {
        if (cartmodelList != null) {
            return cartmodelList.size();
        }
        return super.getItemCount();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView productName, quantity, totalPrice;
        ImageView productImage;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            productName = itemView.findViewById(R.id.pnametext);
            quantity = itemView.findViewById(R.id.quantity);
            totalPrice = itemView.findViewById(R.id.totalprice);
            productImage = itemView.findViewById(R.id.img2);
        }
    }
}

优化Fragment代码

Fragment中先后创建了两个适配器实例,第一个普通适配器可以直接删除,保留Firebase适配器即可:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fragment_app_cart,container,false);

    recyclerView = view.findViewById(R.id.recylervieww);
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

    FirebaseRecyclerOptions<Cartmodel> options =
            new FirebaseRecyclerOptions.Builder<Cartmodel>()
                    .setQuery(FirebaseDatabase.getInstance().getReference().child("Cart List"), Cartmodel.class)
                    .build();

    cartadapt = new cartAdapter(options);
    recyclerView.setAdapter(cartadapt);

    return view;
}

修改完成后,startListening()和stopListening()方法即可正常调用,同时也能兼容你在其他Activity中使用普通列表的场景。

内容的提问来源于stack exchange,提问作者Aditya Singh Rajput

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:46:14