我在 FirebaseRecyclerAdapter 类中找不到 populateViewHolder 方法 [英] I can't find populateViewHolder Method in FirebaseRecyclerAdapter class

查看:25
本文介绍了我在 FirebaseRecyclerAdapter 类中找不到 populateViewHolder 方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的项目中使用 FirebaseRecyclerAdapter 并且我在之前的项目中使用了这个代码段

I want to use FirebaseRecyclerAdapter in my project and I used this code segment in a previous Project

FirebaseRecyclerAdapter<ChatMessage, ChatMessageViewHolder> adapter = new FirebaseRecyclerAdapter<ChatMessage, ChatMessageViewHolder>(ChatMessage.class, android.R.layout.two_line_list_item, ChatMessageViewHolder.class, ref) {
              public void populateViewHolder(ChatMessageViewHolder chatMessageViewHolder, ChatMessage chatMessage, int position) {
                  chatMessageViewHolder.nameText.setText(chatMessage.getName());
                  chatMessageViewHolder.messageText.setText(chatMessage.getMessage());
              }
          };
         recycler.setAdapter(mAdapter);

它工作正常,但现在不再工作了,新版本的 FirebaseUi 是否有任何更新不能让我现在重用此代码?

and it was working fine but now it doesn't work any more, Is there any update in the new version of FirebaseUi that can't allow me to reuse this code now?

我在我的项目中尝试过这个

 @Override
    protected void onStart() {
        super.onStart();
        FirebaseRecyclerAdapter<BlogModel, BlogListViewHolder> adapter = new FirebaseRecyclerAdapter<BlogModel, BlogListViewHolder>(BlogModel.class, android.R.layout.two_line_list_item, BlogListViewHolder.class, mDatabaseReference) {
            public void populateViewHolder(BlogListViewHolder blogListViewHolder, BlogModel blogModel, int position) {
                blogListViewHolder.postTitle.setText(blogModel.getPostTitle());
                blogListViewHolder.postDesc.setText(blogModel.getPostDesc());

            }
        };
        mBlogList.setAdapter(adapter);
    }

Android Studio 给出一个错误,提示您必须实现 onCreateViewHolder,onBindViewHolder 方法.

and Android Studio gives an error saying you must implement onCreateViewHolder,onBindViewHolder Method.

BlogListViewHolder 类

public static class BlogListViewHolder extends RecyclerView.ViewHolder {

        ImageView postImage;
        TextView postTitle;
        TextView postDesc;

        public BlogListViewHolder(View view) {
            super(view);
            postImage = view.findViewById(R.id.blog_image_id);
            postTitle = view.findViewById(R.id.blog_title_id);
            postDesc = view.findViewById(R.id.blog_desc_id);
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                }
            });

        }

    }

我使用这个依赖

dependencies {



 compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:26.0.2'
        compile 'com.google.firebase:firebase-auth:11.4.2'
        compile 'com.google.firebase:firebase-database:11.4.2'
        compile 'com.google.firebase:firebase-storage:11.4.2'
        compile 'com.firebaseui:firebase-ui-database:3.1.0'
        compile 'com.firebaseui:firebase-ui-firestore:3.1.0'
        compile 'com.firebaseui:firebase-ui-auth:3.1.0'
        compile 'com.firebaseui:firebase-ui-storage:3.1.0'
        testCompile 'junit:junit:4.12'
        compile 'com.squareup.picasso:picasso:2.5.2'

    }
    apply plugin: 'com.google.gms.google-services'

推荐答案

语法已更改.概述调用的文档部分在这里:

The syntax has changed. The section of the doc outlining the calls is here:

https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md

这是带有 Firebase 数据库和 FirebaseUI 版本的应用程序 gradle 文件:

Here is the app gradle file with Firebase Database and FirebaseUI versions:

// FirebaseUI for Firebase Realtime Database
compile 'com.firebaseui:firebase-ui-database:3.1.0'
compile 'com.google.firebase:firebase-database:11.4.2'

我定义了标准的 ViewHolder 和 Model 类.为简洁起见,我将它们排除在外.

I have standard ViewHolder and Model classes defined. I'll leave them out for brevity.

我的 Fragment 类顶部的实例变量:

Instance variables at top of my Fragment class:

private RecyclerView mPeopleRV;
private FirebaseRecyclerAdapter<PersonModel, PeopleVH> mPeopleRVAdapter;

在我的 Fragment 的 onCreateView() 中:

In onCreateView() of my Fragment:

mPeopleRV = v.findViewById(R.id.peopleRV);

在我的 Fragment 的 onActivityStarted() 中,所有动作都在这里.

In onActivityStarted() of my Fragment is where all the action is.

onCreateViewHolder 是行布局膨胀的地方.而 bindViewHolder() 是您使用从 Firebase 获取的模型数据填充行的地方.

onCreateViewHolder is where the row layout gets inflated. And bindViewHolder() is where you populate the row with your model data fetched from Firebase.

适配器的构造函数现在采用您根据查询和模型定义的一组选项.

The constructor for the adapter now takes a set of options that you define based on your query and model.

    DatabaseReference personsRef = FirebaseDatabase.getInstance().getReference().child("People");
    Query personsQuery = personsRef.orderByKey();

    mPeopleRV.hasFixedSize();
    mPeopleRV.setLayoutManager(new LinearLayoutManager(getActivity()));

    FirebaseRecyclerOptions personsOptions = new FirebaseRecyclerOptions.Builder<PersonModel>().setQuery(personsQuery, PersonModel.class).build();

    mPeopleRVAdapter = new FirebaseRecyclerAdapter<PersonModel, PeopleVH>(personsOptions) {
        @Override
        protected void onBindViewHolder(PeopleVH holder, int position, PersonModel model) {
            holder.setPersonFirstName(model.getFirstName());
            holder.setPersonLastName(model.getLastName());
        }

        @Override
        public PeopleVH onCreateViewHolder(ViewGroup parent, int viewType) {

            View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.single_row_people_rv, parent, false);

            return new PeopleVH(view);
        }
    };

    mPeopleRV.setAdapter(mPeopleRVAdapter);

稍后添加:

不要忘记在 onStart() 和 onStop() 中启动和停止适配器侦听器:

Don't forget to start and stop the adapter listener in onStart() and onStop():

@Override
public void onStart() {
    super.onStart();
    mPeopleRVAdapter.startListening();
}

@Override
public void onStop() {
    super.onStop();
    mPeopleRVAdapter.stopListening();
}

这篇关于我在 FirebaseRecyclerAdapter 类中找不到 populateViewHolder 方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆