firebaserecycleradapter

firebaserecycleradapter

我目前正在按照教程向我的应用程序添加实时位置跟踪。由于本教程的创建者使用的是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();
}


这是一个示例,您必须针对您的用例进行调整

10-02 04:20