0

This is my code:

Liste.java file:

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

My class model:

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;
    }
   }

DetailsPage.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 );


    }
}

My questions: At the present in my recyclerView it shows me only Nom and Adresse of Dentists in my DentistList (retrieved from my firebase databse). How can I modify my code : when i clicked an item in my recyclerView ,in my second Activity "DetailsPage " it shows me the clicked item with more details ( Nom, Adresse ,NumTel and Email). I need help. Thanks.

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
Nesrine
  • 25
  • 7
  • See https://stackoverflow.com/questions/34110497/how-to-implement-a-setonitemclicklistener-firebaserecyclerviewadapter – Frank van Puffelen Jan 03 '18 at 14:41
  • I need to Know how i should use the putExtra() and the getExtra() to pass an intent between my two activities : How can I modify my code : when i clicked an item in my recyclerView (first activity: liste),in my second Activity "DetailsPage " it shows me the clicked item with more details ( Nom, Adresse ,NumTel and Email). – Nesrine Jan 03 '18 at 19:54

1 Answers1

0

Two Things that you have to change :

  1. Make your object serialisable or parcelable.

    public class Dentist implements Serializable{...}

    OR

    public class Dentist implements Parcelable{...}

    Custom Object implement parcelable. This will help you implement parcelable in your object.

  2. Pass object through intent

    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);
                    }
    
                }
    });
    
mark922
  • 1,136
  • 2
  • 11
  • 20
  • Thanks for your answer but if i want to implement the parcelable interface how can i Pass the object throught an intent ? – Nesrine Jan 04 '18 at 10:00
  • Then you have to implement Parcelable instead of Serializable in the Dentist class. I have added the helper links which can help you implement Parcelable in your object. – mark922 Jan 04 '18 at 10:12
  • What is the exact question ? Please elaborate. – mark922 Jan 04 '18 at 10:23
  • I'm sorry, just The object is passed but Null .What's the problem ? – Nesrine Jan 04 '18 at 10:46