我目前正在按照教程向我的应用程序添加实时位置跟踪。由于本教程的创建者使用的是firebase-ui-auth:1.2.0,而不是最新版本的firebase-ui-auth:4.3.1,因此我遇到了一些问题。
教程的链接如下:
https://www.youtube.com/watch?v=17HqLBkuX-E
我知道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 Adapter,请在此处阅读文档
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();
}
这是一个示例,您必须针对您的用例进行调整