单击与 Firebase 链接的 RecyclerView 中的记录时如何打开另一个 activity

How to open anothor activity when click on record in RecyclerView linked with Firebase

我制作了一个从 Android 应用程序获取数据并将其存储到 Firebase 的应用程序,我制作了 activity,其中包括显示数据的 RecyclerView,但问题是当我单击 RecyclerView 中的任何记录,我想打开另一个包含与按下的相同数据的屏幕,我尝试下面提到的代码,但是当你按下 RecyclerView 时,应用程序停止(我认为问题出在点击记录时传输数据的过程) 请帮我解决问题

class代码

public class EMP_INFO implements Serializable {
    private String Id;
    private String Name;
    private String City;

    public EMP_INFO() {
    }

    public String getEmployeeID() {
        return Id;
    }
    public void setEmployeeID(String ID) {
        this.Id = ID;
    }

    public String getEmployeeName() {
        return Name;
    }
    public void setEmployeeName(String Name) {
        this.Name = Name;
    }

    public String getEmployeeCity() {
        return City;
    }

    public void setEmployeeCity(String City) {
        this.City = City;
    }
}

适配器代码

public class EMP_INFO_Adapter extends FirebaseRecyclerAdapter<EMP_INFO, EMP_INFO_Adapter.personsViewholder> {

    public EMP_INFO_Adapter(@NonNull FirebaseRecyclerOptions<EMP_INFO> options)
    {
        super(options);
    }

    @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());

        Intent intent = new Intent(context, FireBase_Save_data_1.class);

        intent.putExtra("FB_id1", String.valueOf(model.getEmployeeID()));
        intent.putExtra("FB_name1", String.valueOf(model.getEmployeeName()));
        intent.putExtra("FB_city1", String.valueOf(model.getEmployeeCity()));

        activity.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);
        }
    }
}

RecyclerViewactivity代码

public class FireBase_Recyclerview_2 extends AppCompatActivity {

    private RecyclerView recyclerView;
    Button add_button;
    EMP_INFO_Adapter adapter;
    //EMP_INFO_Adapter_3 adapter;
    DatabaseReference mbase;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fire_base_recyclerview_2);

        add_button = findViewById(R.id.add_button);
        recyclerView = findViewById(R.id.recycler1);
        // To display the Recycler view linearly
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        mbase = FirebaseDatabase.getInstance().getReference("EmployeeInfo") ;
        FirebaseRecyclerOptions<EMP_INFO> options = new FirebaseRecyclerOptions.Builder<EMP_INFO>()
                .setQuery(mbase, EMP_INFO.class).build();

        adapter = new EMP_INFO_Adapter(options);
        //adapter = new EMP_INFO_Adapter_3(options);
        recyclerView.setAdapter(adapter);

        add_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(FireBase_Recyclerview_2.this, FireBase_Save_data_1.class);
                startActivity(intent);
            }
        });
    }

    @Override protected void onStart()
    {
        super.onStart();
        adapter.startListening();
    }

    @Override protected void onStop()
    {
        super.onStop();
        adapter.stopListening();
    }
}

您无法在 onBinViewHolder.move 内启动 activity 该代码到 viewholder class。

public class EMP_INFO_Adapter extends FirebaseRecyclerAdapter<EMP_INFO, EMP_INFO_Adapter.personsViewholder> {

    public EMP_INFO_Adapter(@NonNull FirebaseRecyclerOptions<EMP_INFO> options)
    {
        super(options);
    }

    @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());

      
    }

    @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 implements View.OnClickListener
         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);
            itemView.setOnClickListener(this);
            

        }

 @Override
        public void onClick(View view) {
        
              int id=getAdapterPosition();
        Intent intent = new Intent(context, FireBase_Save_data_1.class);

        intent.putExtra("FB_id1", String.valueOf(model.get(id).getEmployeeID()));
        intent.putExtra("FB_name1", String.valueOf(model.get(id).getEmployeeName()));
        intent.putExtra("FB_city1", String.valueOf(model.get(id).getEmployeeCity()));

        activity.startActivityForResult(intent, 1);
            }
    }
           
        }
    }
}

您可以在适配器 onBindViewHolder 内的项目上放置一个点击监听器,如下所示。

holder.itemView.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       Context context = v.getContext();
       Intent intent = new Intent(context, FireBase_Save_data_1.class);
       intent.putExtra("empId", model.getEmployeeID());
       intent.putExtra("empName", model.getEmployeeName());
       intent.putExtra("empCity", model.getEmployeeCity());
       context.startActivity(intent);
   }
});