Firebase Recycler Adapter显示错误[重复]

问题描述 投票:-2回答:2

这个问题在这里已有答案:

变量'viewholder','postion'和模型是从内部类访问它需要声明final,但是当我最终它在适配器中显示错误。我正在使用Firebase 11.2.0请帮助我

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();
                        }
                    }
                });
android firebase
2个回答
0
投票

没有必要声明位置最终使用holder.getAdapterPosition()它将返回位置。

对于ViewHolder,将setOnClickListener移动到ViewHolder

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

0
投票

您需要在此方法中发送firebase选项。

因为在FirebaseRecyclerAdapter这样的构造函数。

有关详细信息,请参阅以下代码

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

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

也请参考this link

© www.soinside.com 2019 - 2024. All rights reserved.