java - FirebaseRecyclerAdapter 问题。 Firebase 用户界面 1.2.0 与 4.3.1 相比

标签 java android

我目前正在按照教程将实时位置跟踪添加到我的应用程序中。我遇到了一些问题,因为本教程的创建者使用的是 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/

相关文章:

java - JButton 新手,如何让它们执行一个事件?

android - 无法在 Android 中的 FrameLayout 上检测手势

java - 如何将图像插入SqLite DB

android - 如何使用 Firebase ML Kit 在图像中查找标记?

java - 如何跟踪从 eclipse-link JPA 到 DB 的 SQL 调用

java - 在 onBindviewHolder 中使用不带循环的标签

java - 如何使用外部库在 java 上正确工作但在 Android Activity 上不工作

java - J8583 如何将 TPDU 设置为二进制

android - 在动画期间更改 ImageView 图像

Android SQLite 替代品