java - Android के साथ RecyclerView में फायरस्टार से डेटा कैसे प्रदर्शित करें?



firebase android-recyclerview (1)

Android का उपयोग करके RecyclerView में मौजूदा फायरस्टार डेटाबेस से डेटा प्रदर्शित करने का सबसे अच्छा तरीका क्या है?

यह एक उत्तर में पूर्ण विवरण के रूप में कवर नहीं किया गया है, इसलिए मैंने इस प्रश्नोत्तर शैली को जोड़ा है ताकि इसे टिप्पणियों में जोड़ा जा सके।


मान लें कि आपके पास एक फायरस्टार डेटाबेस संरचना है जो इस तरह दिखता है:

Firestore-root
    |
    --- products (collection)
           |
           --- documentIdOne (document)
           |        |
           |        --- productName: "Milk"
           |
           --- documentIdTwo (document)
           |        |
           |        --- productName: "Soy Milk"
           |
           --- documentIdThree (document)
                    |
                    --- productName: "Bacon"

एक मॉडल वर्ग जो इस तरह भी दिखता है:

public class ProductModel {
    private String productName;

    public ProductModel() {}

    public ProductModel(String productName) {this.productName = productName;}

    public String getProductName() {return productName;}
}

और एक .XML फ़ाइल जिसमें एक RecyclerView शामिल है जो इस तरह दिखता है:

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/recycler_view"/>

सभी उत्पाद नामों को प्रदर्शित करने के लिए, कृपया अगले चरणों का पालन करें।

सबसे पहले, आपको अपनी गतिविधि में RecyclerView खोजने और इस तरह से LinearLayoutManager सेट करने की आवश्यकता है:

RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));

फिर आपको अपने फायरस्टार डेटाबेस और इस तरह से एक Query ऑब्जेक्ट का मूल संदर्भ बनाने की आवश्यकता है:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
Query query = rootRef.collection("products")
        .orderBy("productName", Query.Direction.ASCENDING);

फिर आपको इस तरह एक FirestoreRecyclerOptions ऑब्जेक्ट बनाना होगा:

FirestoreRecyclerOptions<ProductModel> options = new FirestoreRecyclerOptions.Builder<ProductModel>()
        .setQuery(query, ProductModel.class)
        .build();

अपनी गतिविधि कक्षा में, एक holder वर्ग बनाएँ जो इस तरह दिखता है:

private class ProductViewHolder extends RecyclerView.ViewHolder {
    private View view;

    ProductViewHolder(View itemView) {
        super(itemView);
        view = itemView;
    }

    void setProductName(String productName) {
        TextView textView = view.findViewById(R.id.text_view);
        textView.setText(productName);
    }
}

फिर एक adapter बनाएं जिसे वैश्विक घोषित किया गया है:

private FirestoreRecyclerAdapter<ProductModel, ProductViewHolder> adapter;

और इसे अपनी गतिविधि में इस तरह से तत्काल करें:

adapter = new FirestoreRecyclerAdapter<ProductModel, ProductViewHolder>(options) {
    @Override
    protected void onBindViewHolder(@NonNull holder productViewHolder, int position, @NonNull ProductModel productModel) {
        holder.setProductName(productModel.getProductName());
    }

    @NonNull
    @Override
    public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_product, parent, false);
        return new ProductViewHolder(view);
    }
};
recyclerView.setAdapter(adapter);

अंत में, निम्नलिखित दो विधियों को ओवरराइड करना न भूलें और परिवर्तनों के बारे में सुनना शुरू करें:

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();

    if (adapter != null) {
        adapter.stopListening();
    }
}

परिणाम यह है:

संपादित करें:

यदि आप उपयोगकर्ता को किसी आइटम पर क्लिक करते समय टोस्ट संदेश प्रदर्शित करना चाहते हैं, तो कृपया ProductViewHolder वर्ग से setProductName() विधि के अंदर कोड की निम्न पंक्तियाँ जोड़ें:

textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Toast.makeText(getApplicationContext(), productName, Toast.LENGTH_SHORT).show();
    }
});




google-cloud-firestore