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

点击绑定Firebase的RecyclerView记录跳转Activity应用崩溃如何解决?

存在的问题

  • 适配器中context、activity变量未初始化就直接调用,触发空指针异常,是应用崩溃的直接原因
  • 跳转逻辑直接写在onBindViewHolder方法中,该方法会在条目加载时自动执行,会导致条目加载完成就自动跳转,完全不符合点击跳转的需求
  • 没有给RecyclerView条目绑定点击监听器,点击逻辑和条目点击动作没有关联

修改方案

1. 调整适配器EMP_INFO_Adapter代码

新增构造参数传入上下文,将跳转逻辑绑定到条目点击事件中:

public class EMP_INFO_Adapter extends FirebaseRecyclerAdapter<EMP_INFO, EMP_INFO_Adapter.personsViewholder> {
    private Context mContext;

    // 构造方法新增Context参数
    public EMP_INFO_Adapter(@NonNull FirebaseRecyclerOptions<EMP_INFO> options, Context context)
    {
        super(options);
        this.mContext = context;
    }

    @Override
    protected void
    onBindViewHolder(@NonNull personsViewholder holder, int position, @NonNull EMP_INFO model)
    {
        holder.F_ID.setText(model.getEmployeeID());
        holder.F_name.setText(model.getEmployeeName());
        holder.F_city.setText(model.getEmployeeCity());

        // 给条目根布局绑定点击事件,仅点击时才触发跳转
        holder.itemView.setOnClickListener(v -> {
            Intent intent = new Intent(mContext, FireBase_Save_data_1.class);
            intent.putExtra("FB_id1", model.getEmployeeID());
            intent.putExtra("FB_name1", model.getEmployeeName());
            intent.putExtra("FB_city1", model.getEmployeeCity());
            // 不需要接收返回结果可以直接替换为startActivity(intent)
            ((Activity)mContext).startActivityForResult(intent, 1);
        });
    }

    @NonNull
    @Override
    public personsViewholder
    onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
    {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fire_base_my_row, parent, false);
        return new EMP_INFO_Adapter.personsViewholder(view);
    }

    class personsViewholder extends RecyclerView.ViewHolder { TextView F_ID, F_name, F_city;
        public personsViewholder(@NonNull View itemView)
        {
            super(itemView);
            F_ID = itemView.findViewById(R.id.F_ID);
            F_name = itemView.findViewById(R.id.F_name);
            F_city = itemView.findViewById(R.id.F_city);
        }
    }
}

2. 修改RecyclerView所属Activity的适配器初始化代码

创建适配器实例时传入当前Activity的上下文:

// 将原有adapter = new EMP_INFO_Adapter(options); 替换为下方代码
adapter = new EMP_INFO_Adapter(options, FireBase_Recyclerview_2.this);

3. 目标页面FireBase_Save_data_1接收传递数据

在目标页面的onCreate方法中添加如下代码即可拿到对应数据:

Intent intent = getIntent();
String employeeId = intent.getStringExtra("FB_id1");
String employeeName = intent.getStringExtra("FB_name1");
String employeeCity = intent.getStringExtra("FB_city1");
// 可自行将上述数据赋值给对应控件完成展示

内容的提问来源于stack exchange,提问作者Amr klmop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 18:15:03