使用firebase数据库的RecyclerView onClickListener

问题描述 投票:0回答:1

这是我的代码:

Liste.java文件:

 public class Liste extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{

    RecyclerView myRecyclerview;
    MyAdapter adapter;
    List<Dentist> listDentist;
    FirebaseDatabase FDB;
    DatabaseReference DBR;

    @SuppressLint("RestrictedApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate ( savedInstanceState );
        setContentView ( R.layout.activity_liste );

        myRecyclerview = (RecyclerView) findViewById ( R.id.myRecycler );
        myRecyclerview.setHasFixedSize ( true );
        RecyclerView.LayoutManager LM = new LinearLayoutManager ( getApplicationContext ());
        myRecyclerview.setLayoutManager ( LM );
        myRecyclerview.setItemAnimator ( new DefaultItemAnimator () );
        myRecyclerview.addItemDecoration ( new DividerItemDecoration ( getApplicationContext (),LinearLayoutManager.VERTICAL ) );

        listDentist = new ArrayList<> (  );

        adapter = new MyAdapter(listDentist);

        FDB= FirebaseDatabase.getInstance ();
        GetDataFirebase();
void GetDataFirebase(){
        DBR = FDB.getReference ("dentistes");

        DBR.addChildEventListener ( new ChildEventListener ( ) {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                Dentist data = dataSnapshot.getValue (Dentist.class);
                //Add to Arraylist
                listDentist.add ( data );
                //Add list into adapter
                myRecyclerview.setAdapter ( adapter );
                adapter.notifyDataSetChanged();

            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        } );
    }

    public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{

        List<Dentist> listArray;

        public MyAdapter (List<Dentist> List){
            this.listArray = List;
        }

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

        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            Dentist data = listArray.get ( position );

            holder.TextNom.setText ( data.getNom () );
            holder.TextAdresse.setText ( data.getAdresse () );

        }

        public class MyViewHolder extends RecyclerView.ViewHolder{
            TextView TextNom;
            TextView TextAdresse;

            public MyViewHolder(View itemView) {
                super ( itemView );
                TextNom = (TextView)itemView.findViewById ( R.id.nom_dentist );
                TextAdresse = (TextView)itemView.findViewById ( R.id.adresse_dentist );

                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View itemView) {

                        Intent intent = new Intent(itemView.getContext(), DetailsPage.class);
                        itemView.getContext().startActivity(intent);
                        // get position
                        int pos = getAdapterPosition();

                        // check if item still exists
                        if(pos != RecyclerView.NO_POSITION){
                            Dentist clickedDataItem = listArray.get(pos);
                            Toast.makeText(itemView.getContext(), "You clicked " + clickedDataItem.getNom(), Toast.LENGTH_SHORT).show();
                        }

                    }
                });
            }
        }


        @Override
        public int getItemCount() {
            return listArray.size ();
        }
    }

我的班级模特:

public class Dentist {
     private String Nom;
     private String Adresse;
     private String NumTel;
     private String Email;

     public String getNom() {
        return Nom;
     }

    public void setNom(String nom) {
       Nom = nom;
    }

    public String getAdresse() {
        return Adresse;
    }

    public void setAdresse(String adresse) {
        Adresse = adresse;
   }

    public String getNumTel() {
        return NumTel;
    }

    public void setNumTel(String numTel) {
        NumTel = numTel;
    }

    public String getEmail() {
       return Email;
    }

    public void setEmail(String email) {
       Email = email;
    }
   }

details Page.Java:

public class DetailsPage extends AppCompatActivity {
    Toolbar toolbar;
    TextView DetailNom;

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

        this.toolbar = (Toolbar) findViewById(R.id.toolbar);

        //definir notre toolbar en tant qu'actionBar
        setSupportActionBar(toolbar);

        setTitle ( "Détails du Médecin" );

        DetailNom = (TextView)findViewById ( R.id.detail_nom );


    }
}

我的问题:目前在我的recyclerView中,它只在我的DentistList中显示了Nom和Adresse of Dentist(从我的firebase数据库中检索到)。如何修改我的代码:当我点击我的recyclerView中的一个项目时,在我的第二个活动“DetailsPage”中,它向我显示了包含更多详细信息的点击项目(Nom,Adresse,NumTel和Email)。我需要帮助。谢谢。

android firebase firebase-realtime-database android-recyclerview onclicklistener
1个回答
0
投票

你需要改变两件事:

  1. 使您的对象可序列化或可分割。 public class Dentist implements Serializable{...} 要么 public class Dentist implements Parcelable{...} Custom Object implement parcelable。这将帮助您在对象中实现parcelable。
  2. 通过意图传递对象 itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View itemView) { Intent intent = new Intent(itemView.getContext(), DetailsPage.class); // get position int pos = getAdapterPosition(); // check if item still exists if(pos != RecyclerView.NO_POSITION){ Dentist clickedDataItem = listArray.get(pos); Toast.makeText(itemView.getContext(), "You clicked " + clickedDataItem.getNom(), Toast.LENGTH_SHORT).show(); intent.putExtra("dentistObject", clickedDataItem); itemView.getContext().startActivity(intent); } } });
© www.soinside.com 2019 - 2024. All rights reserved.