jeudi 27 juin 2019

Stay checkboxes state when app restart/ reload

I'm creating my own app. The goal is to have a list of products with 3 checkboxes for each one. 1 checkbox : " I have " 1 checbox : "I want" and 1 for " I want to exchange".

But click function is OK but when I restart the app, I didn't have my checkboxes completed. They are all false.

I stock in my Firebase the state of the chechbox in "possede" of each user. see picture)

Can you help me please. I tried lots of things but nothing works

@Override
protected void onStart() {
    super.onStart();
    FirebaseRecyclerOptions<Products> options =
            new FirebaseRecyclerOptions.Builder<Products>()
                    .setQuery( ProductsRef, Products.class )
                    .build();

    FirebaseRecyclerAdapter<Products, ProductViewHolder> adapter =
            new FirebaseRecyclerAdapter<Products, ProductViewHolder>( options ) {
                @Override
                protected void onBindViewHolder(@NonNull final ProductViewHolder holder, int position, @NonNull final Products model) {

                    holder.txtProductName.setText( model.getTitle() );
                    possedeCheckbox = (CheckBox) holder.itemView.findViewById( R.id.pin_posseder_checkbox );
                    echangeCheckbox = (CheckBox) holder.itemView.findViewById( R.id.pin_echanger_checkbox );
                    desireCheckbox = (CheckBox) holder.itemView.findViewById( R.id.pin_desirer_checkbox );

                    DatabaseReference UserRef = FirebaseDatabase.getInstance().getReference().child( "Users" );
                    UserRef.child( Prevalent.currentOnlineUser.getPseudo() ).child( "possede" );
                    ValueEventListener valueEventListener = new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            ArrayList<String> possedePins = new ArrayList<String>(  );
                            for (DataSnapshot ds : dataSnapshot.child(Prevalent.currentOnlineUser.getPseudo()).child( "possede" ).getChildren()) {
                                String name = ds.getKey();
                                possedePins.add( name );
                            }
                            System.out.println(model.getTitle());
                            if(possedePins.contains( model.getTitle() )){
                                possedeCheckbox.setChecked( true );
                                System.out.println("YEEESSSSS");
                            } else {
                                System.out.println("NOOOOOOOO");
                            };
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                        }
                    };

                    UserRef.addValueEventListener( valueEventListener );



                    // initialiser les Checkbox
                    Picasso.get().load( model.getImage() ).into( holder.imageView );

                    possedeCheckbox.setOnLongClickListener( new View.OnLongClickListener() {
                        @Override
                        public boolean onLongClick(View v) {
                            Toast.makeText(getApplicationContext(),"clique si tu possède ce pin", Toast.LENGTH_SHORT).show();
                            return false;
                        }
                    } );
                    holder.itemView.findViewById( R.id.pin_posseder_checkbox ).setOnClickListener( new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            // quand je deselectionne
                            if (possedeCheckbox.isChecked()) {
                                possedeCheckbox.setChecked( false );
                                AddPosedePins(model.getTitle(), "remove");
                                Toast.makeText( HomeActivity.this, "possede pas", Toast.LENGTH_SHORT ).show();
                            } else {
                                // quand je selectionne
                                possedeCheckbox.setChecked( true );
                                AddPosedePins(model.getTitle(), "add");
                                Toast.makeText( HomeActivity.this, "possede ", Toast.LENGTH_SHORT ).show();
                            }
                        }
                    } );
                    holder.itemView.findViewById( R.id.pin_echanger_checkbox ).setOnClickListener( new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            if (echangeCheckbox.isChecked()) {
                                possedeCheckbox.setChecked( false );
                                Toast.makeText( HomeActivity.this, "echange pas", Toast.LENGTH_SHORT ).show();
                            } else {
                                possedeCheckbox.setChecked( true );
                                Toast.makeText( HomeActivity.this, "echange", Toast.LENGTH_SHORT ).show();
                            }
                        }
                    } );
                    holder.itemView.findViewById( R.id.pin_desirer_checkbox ).setOnClickListener( new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            if (desireCheckbox.isChecked()) {
                                possedeCheckbox.setChecked( false );
                                Toast.makeText( HomeActivity.this, "desire pas", Toast.LENGTH_SHORT ).show();
                            } else {
                                possedeCheckbox.setChecked( true );
                                Toast.makeText( HomeActivity.this, "desire ", Toast.LENGTH_SHORT ).show();
                            }
                        }
                    } );
                }

                @NonNull
                @Override
                public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    View view = LayoutInflater.from( parent.getContext() ).inflate( R.layout.product_items_layout, parent, false );
                    final ProductViewHolder holder = new ProductViewHolder(view);
                    return holder;
                }
            };
    recyclerView.setAdapter( adapter );
    adapter.startListening();

}

Image of 1 product with its checkboxes image of my database here




Aucun commentaire:

Enregistrer un commentaire