how can I pass data and display in recycler view inside bottom navigation bar?
what I want to happen is that when I login to the account stored in firebase, I can get all the vaccine history of that account and store it inside the recycler view.
but I have trouble in getting the information. I used Intent intent = getActivity().getIntent(); but nothing happens.
here is my patient login activity.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_patient_login);
name = findViewById(R.id.fullName);
IdNo = findViewById(R.id.idNumber);
}
// Validate name
private Boolean validateName(){
String val = name.getText().toString();
if(val.isEmpty()){
name.setError("Field is Empty");
return false;
}else{
name.setError(null);
name.setEnabled(false);
return true;
}
}
// Validate ID number
private Boolean validateIdNumber(){
String val = IdNo.getText().toString();
if(val.isEmpty()){
IdNo.setError("Field cannot be empty");
return false;
}else{
IdNo.setError(null);
name.setEnabled(false);
return true;
}
}
public void loginPatient(View view){
//validate Login info
if (!validateName() | !validateIdNumber()) {
return;
}else{
isUser();
}
}
//if validation is correct
private void isUser() {
final String userEnteredIdNo = IdNo.getText().toString().trim();
final String userEnteredName = name.getText().toString().trim();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Patient List");
Query checkUser = reference.orderByChild("id").equalTo(userEnteredIdNo);
checkUser.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
IdNo.setError(null);
IdNo.setEnabled(false);
String IdNoFromDB = dataSnapshot.child(userEnteredIdNo).child("name").getValue(String.class);
if(IdNoFromDB.equals(userEnteredName)){
IdNo.setError(null);
IdNo.setEnabled(false);
String imageFromDB = dataSnapshot.child(userEnteredIdNo).child("image").getValue(String.class);
String idFromDB = dataSnapshot.child(userEnteredIdNo).child("id").getValue(String.class);
String nameFromDB = dataSnapshot.child(userEnteredIdNo).child("name").getValue(String.class);
String ageFromDB = dataSnapshot.child(userEnteredIdNo).child("age").getValue(String.class);
String birthdayFromDB = dataSnapshot.child(userEnteredIdNo).child("birthday").getValue(String.class);
String addressFromDB = dataSnapshot.child(userEnteredIdNo).child("address").getValue(String.class);
String vaccineNameFromDB= dataSnapshot.child(userEnteredIdNo).child("vaccine_Name").getValue(String.class);
String institutionNameFromDB = dataSnapshot.child(userEnteredIdNo).child("institution_Name").getValue(String.class);
String vaccineDateFromDB = dataSnapshot.child(userEnteredIdNo).child("vaccine_Date").getValue(String.class);
Intent intent = new Intent(getApplicationContext(), patientProfile.class);
intent.putExtra("image", imageFromDB);
intent.putExtra("id", idFromDB);
intent.putExtra("name", nameFromDB);
intent.putExtra("age", ageFromDB);
intent.putExtra("birthday", birthdayFromDB);
intent.putExtra("address", addressFromDB);
intent.putExtra("vaccine_Name", vaccineNameFromDB);
intent.putExtra("institution_Name", institutionNameFromDB);
intent.putExtra("vaccine_Date", vaccineDateFromDB);
startActivity(intent);
}
else{
name.setError("No such name exists");
name.requestFocus();
}
}
else{
IdNo.setError("Wrong Id Number");
IdNo.requestFocus();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
here is my HistoryFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_history, container, false);
recyclerView = v.findViewById(R.id.historyRecyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
getUser();
return v;
}
private void getUser(){
Intent intent = getActivity().getIntent();
intent.getStringExtra("vaccine_Name");
intent.getStringExtra("institution_Name");
intent.getStringExtra("vaccine_Date");
}
}
and here is my VaccineAdater
public VaccineAdapter(Context context, List<PatientInfoHelperClass> mList) {
this.context = context;
this.mList = mList;
}
@NonNull
@Override
public VaccineAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.vaccine_list,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull VaccineAdapter.MyViewHolder holder, int position) {
//get data
String vName = mList.get(position).getVaccine_Name();
String iName = mList.get(position).getInstitution_Name();
String vDate = mList.get(position).getVaccine_Date();
//set data
holder.vaccine_Name.setText(vName);
holder.institution_Name.setText(iName);
holder.vaccine_Date.setText(vDate);
}
@Override
public int getItemCount() {
return mList.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
TextView vaccine_Name, institution_Name, vaccine_Date;
public MyViewHolder(View itemView){
super(itemView);
vaccine_Name = itemView.findViewById(R.id.vaccineName);
institution_Name = itemView.findViewById(R.id.institutionName);
vaccine_Date = itemView.findViewById(R.id.vaccineDate);
}
}
}
This is the picture of my databse structure. I want to display the vaccine_Name, instituion_Name and vaccine_Date in my recycler view.
This is the picture of my vaccine_list xml.
In your LoginActivity:
The method to start the new activity:
Now, in your started activity, you need to get the passed data: