点击绑定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
相关产品推荐
相关产品推荐

