firebaserecycleradapter() 不能应用于 FirebaseRecyclerAdapter
Posted
技术标签:
【中文标题】firebaserecycleradapter() 不能应用于 FirebaseRecyclerAdapter【英文标题】:firebaserecycleradapter() cannot be applied to 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 是模型类
【参考方案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);
【讨论】:
以上是关于firebaserecycleradapter() 不能应用于 FirebaseRecyclerAdapter的主要内容,如果未能解决你的问题,请参考以下文章
我在 FirebaseRecyclerAdapter 类中找不到 populateViewHolder 方法
在 FirebaseRecyclerAdapter 上应用过滤器
populateViewHolder 未使用 FirebaseRecyclerAdapter (Android) 执行
如何从 FirebaseRecyclerAdapter 中排除项目