【问题标题】:display data using recycler view inside bottom Navigation使用底部导航内的回收站视图显示数据
【发布时间】:2020-11-27 12:59:10
【问题描述】:

如何传递数据并在底部导航栏内的回收站视图中显示?

我想要发生的是,当我登录存储在 firebase 中的帐户时,我可以获取该帐户的所有疫苗历史记录并将其存储在回收站视图中。

但我无法获取信息。我使用 Intent intent = getActivity().getIntent();但什么也没发生。

这是我的患者登录活动。

@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) {

        }
    });
}

这是我的 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");
    
}

}

这是我的 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 是我的数据库结构的图片。我想在我的回收站视图中显示疫苗名称、机构名称和疫苗日期。

This 是我的疫苗清单 xml 的图片。

【问题讨论】:

  • 你的意思是要获取VaccineAdapter中的数据并显示在HistoryFragment中?
  • 是的。绝对

标签: android firebase android-recyclerview android-bottomnav


【解决方案1】:

在您的登录活动中:

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);
                
                goToActivity( imageFromDB , idFromDB , nameFromDB , ageFromDB , birthdayFromDB ,addressFromDB ,vaccineNameFromDB , vaccineDateFromDB , institutionNameFromDB  );
                
                } else{
                    name.setError("No such name exists");
                    name.requestFocus();
                }
            }

启动新活动的方法:

private void goToActivity ( String imageFromDB, String idFromDB, String nameFromDB, String ageFromDB, String birthdayFromDB, String addressFromDB, String vaccineNameFromDB, String vaccineDateFromDB, String institutionNameFromDB) {
            Intent intent = new Intent( LoginActivity.this , 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);
        }

现在,在您开始的活动中,您需要获取传递的数据:

name = getIntent().getExtras().getParcelable("name");

txtView.setText( name );
        

【讨论】:

  • 你从哪里得到数据列表?
  • 抱歉,我在检索数据时仍然遇到问题。我用 dataList = getActivity().getIntent();但这仍然是一个错误。
  • 我只是想传递数据,这就是我使用 getIntent 的原因
  • 我要传递的数据在patientLogin中。
  • 这是我使用的代码mList = getActivity().getIntent();adapter = new VaccineAdapter (getActivity(), mList);但我仍然有一个错误。我觉得我用的方法不合适。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多