我目前正在按照教程将实时位置跟踪添加到我的应用程序中。我遇到了一些问题,因为本教程的创建者使用的是 firebase-ui-auth:1.2.0 而不是最新版本的 firebase-ui-auth:4.3.1。
教程链接如下: https://www.youtube.com/watch?v=17HqLBkuX-E <-- 我目前停留在 27:30
我知道 FirebaseRecyclerAdapter 收到了一些更改,将 populateViewHolder 更改为 onBindViewHolder 和 onCreateViewHolder。
我在学习本教程时遇到的问题是,原始代码编写如下:
private void updateList() {
adapter = new FirebaseRecyclerAdapter<UserRace, OnlineListViewHolder>(
UserRace.class,
R.layout.user_layout,
OnlineListViewHolder.class,
counterRef
) {
@Override
protected void populateViewHolder(OnlineListViewHolder viewHolder, UserRace model, int position) {
viewHolder.txtEmail.setText(model.getEmail());
}
};
adapter.notifyDataSetChanged();
onlineList.setAdapter(adapter);
}
而4.3.1版本写成:
private void updateList() {
adapter = new FirebaseRecyclerAdapter<UserRace, OnlineListViewHolder>(
UserRace.class,
R.layout.user_layout,
OnlineListViewHolder.class,
counterRef
) {
@Override
protected void onBindViewHolder(@NonNull OnlineListViewHolder holder, int position, @NonNull UserRace model) {
holder.txtEmail.setText(model.getEmail());
}
@NonNull
@Override
public OnlineListViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
return null;
}
};
adapter.notifyDataSetChanged();
onlineList.setAdapter(adapter);
}
我在这个版本的代码中收到以下几行错误:
UserRace.class,
R.layout.user_layout,
OnlineListViewHolder.class,
counterRef
) {
红线将出现在括号内的值下方,表示:FirebaseRecyclerAdapter 中的 FirebaseRecyclerAdapter() 不能应用于: 预期参数: 实际参数:
使用版本 1.2.0 来避免此错误允许该代码区域正常运行,但会与我的应用程序的其他区域混淆。
有什么方法可以让我在括号内包含所需数据而不会收到错误消息?我试图研究这个问题,但我不精通 java,所以我一直无法找到解决方案。
如果我所说的有任何不清楚的地方,请告诉我。
所有帮助将不胜感激。
最佳答案
该代码已弃用,现在您需要使用 FirebaseRecyclerOptions
来设置您的 RecyclerView 适配器,请阅读此处的文档
https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md
现在,而不是这样做
adapter = new FirebaseRecyclerAdapter<UserRace, OnlineListViewHolder>(
UserRace.class,
R.layout.user_layout,
OnlineListViewHolder.class,
counterRef
)
你需要像这样
首先,通过构建 FirebaseRecyclerOptions 配置适配器
FirebaseRecyclerOptions<UserRace> options =
new FirebaseRecyclerOptions.Builder<UserRace>()
.setQuery(query, UserRace.class)
.build();
接下来创建 FirebaseRecyclerAdapter 对象。您应该已经有一个 ViewHolder 子类来显示每个项目。
adapter = new FirebaseRecyclerAdapter<UserRace, OnlineListViewHolder>(options) {
@Override
public OnlineListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Create a new instance of the ViewHolder, in this case we are using a custom
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.yourCustomLayout, parent, false);
return new OnlineListViewHolder(view);
}
@Override
protected void onBindViewHolder(OnlineListViewHolder holder, int position, UserRace model) {
// Bind the views
// ...
}
};
最后但同样重要的是,这是一个非常重要的部分,在您的 onStart()
和 onStop()
方法中执行此操作
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
这是一个示例,您必须根据您的用例对其进行调整
关于java - FirebaseRecyclerAdapter 问题。 Firebase 用户界面 1.2.0 与 4.3.1 相比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54682168/