当前位置: 首页 > 知识库问答 >
问题:

Firebase回收器适配器显示错误[重复]

薛欣德
2023-03-14

变量'viewholder'、'position'&model'是从内部类访问的,它需要声明为final,但当我将其声明为final时,在适配器中显示错误。我正在使用Firebase 11.2.0请帮助我

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

共有1个答案

西门磊
2023-03-14

不需要声明最终使用位置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();
                        }
                    }
                });
        }
 类似资料:
  • 我无法填充Firebase回收适配器。我最终想做的是,用户搜索一个名称,数据库中的结果将填充回收人员视图。 数据库结构如下所示: 要填充的代码如下所示,全部位于: 现在我只想让它填充数据库中的所有用户,但似乎什么都没有填充。 是一个。 这是UsersViewHolder类:公共静态类UsersViewHolder扩展了RecyclerView。视图持有者{View mView;TextView m

  • 我收到以下错误:“RecyclerView:未连接适配器;跳过布局”,但我已连接适配器...我尝试了许多不同的方法,但我无法解决错误。 我正在使用Volley库获取数据。当我启动活动时,只有进度条可见,直到结束,我收到上面的Logcat消息。我在中添加了带有适配器的。你能帮我吗? 这是我的代码: 主活动 地震适配器 MainActivity.xml 地震法。xml

  • 问题内容: 我创建了一个显示聊天消息的函数,遵循了教程,并且查看了Firebase列表适配器的文档,但是无论我做什么,都会出现此错误: 这是我的代码: 问题答案: 从FirebaseUI 3.0+版本中隐含以下内容 删除此: 您需要添加以下内容: 是您对列表适配器示例进行的查询: 更多信息在这里: 使用FirebaseUI填充ListView

  • 我正试图让地图在我的Json适配器中工作。但不知何故,我总是收到错误信息: JAVAlang.NullPointerException:尝试调用虚拟方法“void”。所容纳之物上下文空对象引用上的startActivity(android.content.Intent) 这是我的第二个Android项目,我找不到我的错误。我希望你们中的一些人能帮助我。

  • 我正在寻找在Android中使用列表适配器和Recyview适配器的区别。关于性能的任何不同,使用它们的利弊。

  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我