【问题标题】:firebaserecycleradapter() cannot be applied to FirebaseRecyclerAdapterfirebaserecycleradapter() 不能应用于 FirebaseRecyclerAdapter
【发布时间】:2018-04-15 22:52:57
【问题描述】:

谁能告诉我该行的错误是什么。

这是显示的错误消息。

package com.example.souravkumar.sqaurewallpapers;

import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.squareup.picasso.Picasso;

/**
 * Created by Sourav Kumar on 11/3/2017.
 */

public class popular extends AppCompatActivity {

    private RecyclerView recyclerView;
    private DatabaseReference myRef;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        myRef = FirebaseDatabase.getInstance().getReference();
        FirebaseRecyclerAdapter<image_details, BlogViewHolder> adapter = new FirebaseRecyclerAdapter<image_details, BlogViewHolder>(
                image_details.class,
                R.layout.individual_row,

                myRef) {
            @Override
            protected void onBindViewHolder(BlogViewHolder holder, int position, image_details model) {
                holder.setDate(model.getDate());
                holder.setUrl(model.getUrl());
            }

            @Override
            public BlogViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                return null;
            }
        };

        recyclerView.setAdapter(adapter);

    }

    public static  class BlogViewHolder extends RecyclerView.ViewHolder {
        TextView textView;
        ImageView imageView;
        public BlogViewHolder(View itemView) {
            super(itemView);
            textView = (TextView)itemView.findViewById(R.id.date);
            imageView = (ImageView)itemView.findViewById(R.id.imageView);
        }

        public void setDate(Long date) {
            textView.setText(date.toString());
        }

        public void setUrl(String url) {
            Picasso.with(itemView.getContext())
                    .load(url)
                    .resize(50, 50)
                    .centerCrop()
                    .into(imageView);
        }
    }
}

Link to the whole code

【问题讨论】:

  • 请不要显示代码图片(或其他文本内容)。而是编辑您的问题以显示实际代码,并包含您收到的错误消息的文本。见Creating an MCVE
  • 好的..但是你能帮帮我吗?需要帮助
  • 您使用的是哪个版本的 FirebaseUI,image_details 是模型类吗?请以文本形式分享您的代码以及您收到的完整错误消息。
  • firebase Ui:编译'com.firebaseui:firebase-ui-database:3.1.0'
  • 是的 image_details 是模型类

标签: android firebase firebase-realtime-database firebaseui


【解决方案1】:

FirebaseUI 的最新版本 (3.x) 实现了与以前版本不同的初始化 FirebaseRecyclerAdapter 的方法。来自using the FirebaseRecyclerAdapter documentation

首先,通过构建FirebaseRecyclerOptions 来配置适配器。在 在这种情况下,我们将继续我们的聊天示例:

 FirebaseRecyclerOptions<Chat> options =
                new FirebaseRecyclerOptions.Builder<Chat>()
                        .setQuery(query, Chat.class)
                        .build();

接下来创建FirebaseRecyclerAdapter 对象。你应该已经 有一个 ViewHolder 子类来显示每个项目。

因此,对于您的示例,您需要执行以下操作:

FirebaseRecyclerOptions<image_details> options =
        new FirebaseRecyclerOptions.Builder<image_details>()
                .setQuery(myRef, image_details.class)
                .build();

FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<image_details, BlogViewHolder>(options) {
    @Override
    public BlogViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.individual_row, parent, false);

        return new BlogViewHolder(view);
    }

    @Override
    protected void onBindViewHolder(BlogViewHolder holder, int position, image_details model) {
        // Bind the image_details object to the BlogViewHolder
        // ...
    }
};

最后,FirebaseRecyclerAdapter 使用事件侦听器来监控 Firebase 查询的更改。要开始侦听数据,请调用 adapter.startListening()adapter.stopListening() 以停止侦听器。建议分别在onStart()onStop() 中调用它们。更多详情请参阅FirebaseRecyclerAdapter lifecycle documentation

【讨论】:

  • 如何绑定image_details对象?
  • 就像您在创建普通 RecyclerView 时所做的一样,请参阅 creating lists and cards Android documentation。类似于:holder.textView.setText(model.getText()); 或您的 image_details 模型用于获取要在行的 TextView 上显示的文本的任何方法。
  • 先生,我仍然无法在我的片段屏幕上获得输出。你能看看我的项目并告诉我出了什么问题吗?
【解决方案2】:

您错过了启动活动的方法。 将此添加到onStart() 方法中:

firebaseRecyclerAdapter.startListening();

【讨论】:

    【解决方案3】:

    您好,您的错误是由于在此旁边找到的这些 () 中缺少参数

    <image_details, BlogViewHolder>
    

    所以您错过了 BlogViewHolder 类的另一个参数,因此我将添加这段代码并通过以下注释引用您缺少的参数:

    FirebaseRecyclerAdapter<image_details, BlogViewHolder> adapter = new FirebaseRecyclerAdapter<image_details, BlogViewHolder>(
                image_details.class,
                R.layout.individual_row,
                BlogViewHolder.class //see this is missing so you should add it       
                myRef) {
    

    【讨论】:

      【解决方案4】:

      这是正确的方法:

      FirebaseRecyclerOptions<image_details> options =
          new FirebaseRecyclerOptions.Builder<image_details>()
                  .setQuery(myRef, image_details.class)
                  .build();
      
      FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<image_details, BlogViewHolder>(options) {
          @Override
          public BlogViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
              View view = LayoutInflater.from(parent.getContext())
                      .inflate(R.layout.individual_row, parent, false);
      
              return new BlogViewHolder(view);
          }
      
          @Override
          protected void onBindViewHolder(BlogViewHolder holder, int position, image_details model) {
              // Bind the image_details object to the BlogViewHolder
              // ...
          }
      };
      

      【讨论】:

        【解决方案5】:

        我遇到了同样的错误,这对我来说效果很好。希望它可以帮助某人

        //loads data into recycler view onstart up
        @Override
        protected void onStart() {
            super.onStart();
        
            FirebaseRecyclerOptions<Data> options =
                    new FirebaseRecyclerOptions.Builder<Data>()
                            .setQuery(dbReference, Data.class)
                            .build();
        
            FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Data, DataViewHolder>(options) {
                @Override
                public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                    View view = LayoutInflater.from(parent.getContext())
                            .inflate(R.layout.row, parent, false);
        
                    return new DataViewHolder(view);
                }
        
                @Override
                protected void onBindViewHolder(@NonNull DataViewHolder holder, int position, @NonNull Data model) {
                    // Bind the image_details object to the BlogViewHolder
                    // ...
                    holder.setDetails(getApplicationContext(), model.getName(), model.getDepartment(), model.getDescription());
                }
            };
        
        
        
            firebaseRecyclerAdapter.startListening();
            recyclerView.setAdapter(firebaseRecyclerAdapter);
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-12
          • 1970-01-01
          • 2018-10-02
          • 1970-01-01
          • 1970-01-01
          • 2017-02-28
          • 1970-01-01
          相关资源
          最近更新 更多