2017-10-21 167 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

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

相關問題