-2

Variable 'viewholder','postion'& model is accesssed from with inner class it need to be declare final, but when i make it final it shows error in adapter.I am using Firebase 11.2.0 Please help me

enter image description here

 private void loadListFood(String categoryId) {
        adapter=new FirebaseRecyclerAdapter<Food, FoodViewHolder>()
 {
            @Override
            protected void onBindViewHolder(@NonNull FoodViewHolder viewHolder,int position, @NonNull  Food model) {
                viewHolder.food_name.setText(model.getName());
                viewHolder.food_price.setText(String.format(" Rs. %s", model.getPrice().toString()));

                Picasso.with(getBaseContext()).load(model.getImage()).into(viewHolder.food_image);
                //ADD FAvorites
                if (localdb.isFavorite(adapter.getRef(position).getKey()))
                    viewHolder.fav_image.setImageResource(R.drawable.ic_favorite_black_24dp);
                //Click to change favorite state
                viewHolder.fav_image.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                        if (!localdb.isFavorite(adapter.getRef(position).getKey()))
                        {
                            localdb.addToFavorites(adapter.getRef(position).getKey());
                            viewHolder.fav_image.setImageResource(R.drawable.ic_favorite_black_24dp);
                            Toast.makeText(FoodList.this, "" + model.getName() + "was Added To Favorites", Toast.LENGTH_SHORT).show();
                        } else {
                            localdb.removeFromFavorites(adapter.getRef(position).getKey());
                            viewHolder.fav_image.setImageResource(R.drawable.ic_favorite_border_black_24dp);
                            Toast.makeText(FoodList.this, "" + model.getName() + " was Removed From Favorites", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
Shruti
  • 803
  • 9
  • 26
amol junghare
  • 73
  • 1
  • 1
  • 9

2 Answers2

0

You need to send firebase option in this method.

because of constructor like this in FirebaseRecyclerAdapter.

Refer below code for more details:

public FirebaseRecyclerAdapter(@NonNull FirebaseRecyclerOptions<T> options) {
    mSnapshots = options.getSnapshots();

    if (options.getOwner() != null) {
        options.getOwner().getLifecycle().addObserver(this);
    }
}

Refer this link too.

Shruti
  • 803
  • 9
  • 26
Vishal Sojitra
  • 486
  • 3
  • 10
0

No need to declare position to final use holder.getAdapterPosition() it will return the position.

For ViewHolder move your setOnClickListener to ViewHolder class

private void loadListFood(String categoryId) {
        adapter=new FirebaseRecyclerAdapter<Food, FoodViewHolder>()
    {
            @Override
            protected void onBindViewHolder(@NonNull FoodViewHolder viewHolder,int position, @NonNull  Food model) {
                viewHolder.food_name.setText(model.getName());
                viewHolder.food_price.setText(String.format(" Rs. %s", model.getPrice().toString()));


                Picasso.with(getBaseContext()).load(model.getImage()).into(viewHolder.food_image);
                //ADD FAvorites
                if (localdb.isFavorite(adapter.getRef(viewHolder.getAdapterPosition()).getKey()))
                    viewHolder.fav_image.setImageResource(R.drawable.ic_favorite_black_24dp);
            }
    }
}


 class FoodViewHolder extends RecyclerView.ViewHolder {


        ImageView fav_image;


        FoodViewHolder(View itemView) {
            super(itemView);
            fav_image = itemView.findViewById(R.id.fav_image);

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

                        if (!localdb.isFavorite(adapter.getRef(getAdapterPosition()).getKey()))
                        {
                            localdb.addToFavorites(adapter.getRef(getAdapterPosition()).getKey());
                            fav_image.setImageResource(R.drawable.ic_favorite_black_24dp);
                            Toast.makeText(FoodList.this, "" + model.getName() + "was Added To Favorites", Toast.LENGTH_SHORT).show();
                        } else {
                            localdb.removeFromFavorites(adapter.getRef(getAdapterPosition()).getKey());
                            fav_image.setImageResource(R.drawable.ic_favorite_border_black_24dp);
                            Toast.makeText(FoodList.this, "" + model.getName() + " was Removed From Favorites", Toast.LENGTH_SHORT).show();
                        }
                    }
                });
        }
MJM
  • 5,119
  • 5
  • 27
  • 53
  • ok, but what about viewholder & model variables when i make it final it shows error in adapter FirebaseRecyclerAdapter (FirebaseRecyclerOptions) in FirebaseRecyclerAdapter cannot be applied to () – amol junghare Mar 23 '18 at 05:59
  • @amol junghare can you please add you `FoodViewHolder` class i will update code – MJM Mar 23 '18 at 06:04
  • @amol junghare i have updated by answer – MJM Mar 23 '18 at 06:14