android - मैं FirebaseRecyclerAdapter वर्ग में populateViewHolder विधि नहीं ढूँढ सकता




firebase-realtime-database firebaseui (2)

मैं अपने प्रोजेक्ट में 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);
    }

और एंड्रॉइड स्टूडियो एक त्रुटि देता है जिसमें कहा गया है कि आपको 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'

@ लुसी के जवाब के अलावा। अब, आर्किटेक्चर घटक जीवनचक्र के मालिक हैं। Firestoreui android doc के अनुसार

यदि आप मैन्युअल रूप से शुरू / बंद नहीं करना चाहते हैं तो आप अपने आप को FirestoreRecyclerAdapter के जीवनचक्र को प्रबंधित करने के लिए Android आर्किटेक्चर कंपोनेंट्स का उपयोग कर सकते हैं। FirestoreRecyclerOptions.Builder.setLifecycleOwner(...) और FirebaseUI को स्वचालित रूप से शुरू और onStart() और onStop() में सुनना बंद कर onStop()

इस विशिष्ट स्थिति में, personsOptions.setLifecycleOwner(myFragmentOrActivity.this)


वाक्य-विन्यास बदल गया है। कॉल को रेखांकित करने वाले डॉक्टर का अनुभाग यहां है:

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

यहाँ Firebase डेटाबेस और 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 () of My Fragment वह जगह है जहां सभी क्रिया होती है।

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);

बाद में जोड़ा गया:

ऑनस्टार्ट () और ऑनटॉप () में एडॉप्टर श्रोता को शुरू और बंद करना न भूलें:

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

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




firebaseui