2017-10-21 120 views
4

我想用在我的项目FirebaseRecyclerAdapter,我在以前的项目我找不到populateViewHolder方法FirebaseRecyclerAdapter类

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的新版本中是否有更新,无法让我现在重用此代码?

我在我的项目

@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方法。

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' 
+0

是,你必须实现这两个抽象方法 – pskink

回答

6

的语法已更改。该文档概述了电话的部分是在这里:

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

这里是应用程序文件的gradle与火力地堡数据库和FirebaseUI版本:

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

我定义的标准ViewHolder和模型类。为了简洁,我会将它们排除在外。 )我的片段的

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

在onCreateView(:

实例在我的片段类的顶部变量)我的片段的

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

在onActivityStarted(是所有行动。

onCreateViewHolder是行布局变得膨胀的地方。 bindViewHolder()是您从Firebase中获取的模型数据填充行的位置。

适配器的构造函数现在接受一组基于您的查询和模型定义的选项。

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():

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

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

谢谢+露西澄清此更新。 –

相关问题