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

查看:64
本文介绍了我在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;

在我的片段的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天全站免登陆