RecyclerView की मदद से डाइनैमिक सूचियां बनाना Android Jetpack का हिस्सा है.

लिखने का तरीका आज़माएं
Android के लिए, Jetpack Compose हमारा सुझाया गया यूज़र इंटरफ़ेस (यूआई) टूलकिट है. Compose में लेआउट इस्तेमाल करने का तरीका जानें.

RecyclerView की मदद से, डेटा के बड़े सेट को बेहतर तरीके से दिखाया जा सकता है. आपकी सप्लाई और तय करें कि हर आइटम कैसा दिखेगा. साथ ही, RecyclerView लाइब्रेरी ज़रूरत पड़ने पर डाइनैमिक तौर पर एलिमेंट बनाता है.

जैसा कि इसके नाम से ही पता चलता है, RecyclerView उन एलिमेंट को रीसाइकल करता है. जब कोई आइटम, स्क्रोल करके स्क्रीन से बाहर चला जाता है और RecyclerView उसके व्यू को खत्म नहीं करता. इसके बजाय, RecyclerView उन नए आइटम के लिए व्यू का फिर से इस्तेमाल करता है जिन्हें स्क्रीन पर स्क्रोल किया जाता है. RecyclerView, ऐप्लिकेशन की परफ़ॉर्मेंस के साथ-साथ उसके रिस्पॉन्स को भी बेहतर बनाता है बिजली की खपत कम होती है.

मुख्य क्लास

आपकी डाइनैमिक सूची बनाने के लिए, कई क्लास एक साथ काम करती हैं.

  • RecyclerView क्या ViewGroup से व्यू मिले हैं आपके डेटा से मिलता-जुलता है. यह एक व्यू है. इसलिए, RecyclerView को जोड़ें बिलकुल उसी तरह से जोड़ें जैसे आप कोई अन्य यूज़र इंटरफ़ेस (यूआई) एलिमेंट जोड़ते हैं.

  • सूची में मौजूद हर एलिमेंट को किसी व्यू होल्डर ऑब्जेक्ट से तय किया जाता है. टास्क कब शुरू होगा व्यू होल्डर बन जाता है, तो उससे कोई डेटा नहीं जुड़ा है. इस तारीख के बाद व्यू होल्डर बनाया जाता है, तो RecyclerView उसे अपने डेटा से बाइंड करता है. आपने लोगों तक पहुंचाया मुफ़्त में विस्तार करके व्यू होल्डर को परिभाषित करें RecyclerView.ViewHolder.

  • RecyclerView, व्यू का अनुरोध करता है और व्यू को अपने डेटा से बाइंड करता है, एडाप्टर में मेथड को कॉल करके. एक्सटेंडेट करके अडैप्टर तय किया जाता है RecyclerView.Adapter.

  • लेआउट मैनेजर, आपकी सूची में अलग-अलग एलिमेंट को व्यवस्थित करता है. आप RecyclerView लाइब्रेरी से मिले किसी लेआउट मैनेजर का इस्तेमाल करना या तय करें. लेआउट मैनेजर LayoutManager ऐब्सट्रैक्ट क्लास.

RecyclerView के सैंपल ऐप्लिकेशन में यह देखा जा सकता है कि सभी चीज़ें एक साथ कैसे फ़िट हो रही हैं (कोटलिन) या RecyclerView सैंपल ऐप्लिकेशन (Java).

अपना RecyclerView लागू करने का तरीका

अगर आपको RecyclerView का इस्तेमाल करना है, तो आपको कुछ काम करने होंगे. नीचे दिए गए सेक्शन में इनके बारे में विस्तार से बताया गया है.

  1. तय करें कि सूची या ग्रिड कैसा दिखेगा. आम तौर पर, आपके पास RecyclerView लाइब्रेरी के स्टैंडर्ड लेआउट मैनेजर का इस्तेमाल करना.

  2. यह डिज़ाइन करें कि सूची का हर एलिमेंट कैसा दिखेगा और कैसे काम करेगा. जिस जगह की टीम है इस डिज़ाइन में, ViewHolder क्लास को बढ़ाएं. आपके ViewHolder का वर्शन आपकी सूची के आइटम के लिए सभी सुविधाएं देता है. आपका व्यू होल्डर रैपर View के चारों ओर बना देता है और वह व्यू RecyclerView के ज़रिए प्रबंधित किया जाता है.

  3. वह Adapter तय करें जो आपके डेटा को ViewHolder व्यू से जोड़ता है.

बेहतर कस्टमाइज़ेशन भी उपलब्ध हैं विकल्पों की मदद से, अपनी पसंद के मुताबिक अपनी ज़रूरत के हिसाब से RecyclerView का इस्तेमाल करें.

लेआउट प्लान करें

आपके RecyclerView में मौजूद आइटम को LayoutManager क्लास. RecyclerView लाइब्रेरी में तीन लेआउट मैनेजर होते हैं, जो लेआउट की सबसे सामान्य स्थितियां:

  • LinearLayoutManager आइटम को एक डाइमेंशन वाली सूची में व्यवस्थित करता है.
  • GridLayoutManager आइटम को दो-डाइमेंशन वाले ग्रिड में व्यवस्थित करता है:
    • अगर ग्रिड को वर्टिकल तौर पर सेट किया गया है, तो GridLayoutManager सभी क्वेरी को हर पंक्ति के एलिमेंट की चौड़ाई और ऊंचाई एक जैसी है, लेकिन पंक्तियां अलग-अलग हैं की अलग-अलग हाइट हो सकते हैं.
    • अगर ग्रिड को हॉरिज़ॉन्टल तौर पर सेट किया गया है, तो GridLayoutManager सभी वैल्यू डालने की कोशिश करता है हर कॉलम के एलिमेंट की चौड़ाई और ऊंचाई एक जैसी है, लेकिन कॉलम की चौड़ाई अलग-अलग हो सकती हैं.
  • StaggeredGridLayoutManager GridLayoutManager के समान है, लेकिन इसके लिए किसी आइटम को लाइन की ऊंचाई (वर्टिकल ग्रिड के लिए) या एक ही कॉलम में मौजूद आइटम की संख्या बराबर है हॉरिज़ॉन्टल ग्रिड के लिए एक जैसी चौड़ाई होनी चाहिए. इसका नतीजा यह होता है कि आइटम में कॉलम या कॉलम एक-दूसरे से ऑफ़सेट हो सकते हैं.

आपको अलग-अलग आइटम का लेआउट भी डिज़ाइन करना होगा. आपको इसकी ज़रूरत है लेआउट चुनने की सुविधा मिलती है, जैसा कि अगले सेक्शन में बताया गया है.

अपना अडैप्टर और व्यू होल्डर लागू करें

लेआउट तय करने के बाद, आपको अपना Adapter लागू करना होगा और ViewHolder. ये दोनों क्लास एक साथ काम करके, यह तय करती हैं कि आपका डेटा दिखाया जाएगा. ViewHolder एक View के चारों ओर एक रैपर होता है, जिसमें लेआउट चुनें. Adapter, ViewHolder बनाता है ऑब्जेक्ट को ज़रूरत के मुताबिक सेट करता है और उन व्यू के लिए डेटा भी सेट करता है. कॉन्टेंट बनाने की प्रोसेस व्यू को उनके डेटा से जोड़ने को बाइंडिंग कहा जाता है.

अडैप्टर तय करने के बाद, इन तीन मुख्य तरीकों को बदला जाता है:

  • onCreateViewHolder(): RecyclerView जब भी इस तरीके को कॉल करता है एक नया ViewHolder बनाने की ज़रूरत है. यह तरीका, ViewHolder और इससे जुड़ा View, लेकिन यह व्यू के को नहीं भरता कॉन्टेंट—ViewHolder को अब तक किसी खास डेटा के लिए सीमित नहीं किया गया है.

  • onBindViewHolder(): RecyclerView इस तरीके को, ViewHolder को डेटा से जोड़ने के लिए कॉल करता है. कॉन्टेंट बनाने तरीका सही डेटा फ़ेच करता है और व्यू भरने के लिए डेटा का इस्तेमाल करता है होल्डर का लेआउट. उदाहरण के लिए, अगर RecyclerView नामों की सूची दिखाता है, तरीका, सूची में सही नाम ढूंढ सकता है और व्यू को भर सकता है मालिक का TextView विजेट.

  • getItemCount(): RecyclerView डेटासेट का साइज़ जानने के लिए, इस तरीके का इस्तेमाल करता है. उदाहरण के लिए, होता है, तो यह पतों की कुल संख्या हो सकती है. RecyclerView इसका इस्तेमाल यह तय करने के लिए करता है कि कब आपके पास और दिखाया जाएगा.

यहां नेस्ट किए गए ViewHolder वाले ऐसे अडैप्टर का उदाहरण दिया गया है जिसे आम तौर पर इस्तेमाल किया जाता है डेटा की सूची दिखाता है. इस मामले में, RecyclerView एक आसान सूची दिखाता है किए जा सकते हैं. अडैप्टर को स्ट्रिंग का एक ऐसा कलेक्शन पास किया जाता है जिसमें टेक्स्ट होता है ViewHolder एलिमेंट के लिए.

Kotlin


class CustomAdapter(private val dataSet: Array<String>) :
        RecyclerView.Adapter<CustomAdapter.ViewHolder>() {

    /**
     * Provide a reference to the type of views that you are using
     * (custom ViewHolder)
     */
    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val textView: TextView

        init {
            // Define click listener for the ViewHolder's View
            textView = view.findViewById(R.id.textView)
        }
    }

    // Create new views (invoked by the layout manager)
    override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
        // Create a new view, which defines the UI of the list item
        val view = LayoutInflater.from(viewGroup.context)
                .inflate(R.layout.text_row_item, viewGroup, false)

        return ViewHolder(view)
    }

    // Replace the contents of a view (invoked by the layout manager)
    override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {

        // Get element from your dataset at this position and replace the
        // contents of the view with that element
        viewHolder.textView.text = dataSet[position]
    }

    // Return the size of your dataset (invoked by the layout manager)
    override fun getItemCount() = dataSet.size

}

Java


public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

    private String[] localDataSet;

    /**
     * Provide a reference to the type of views that you are using
     * (custom ViewHolder)
     */
    public static class ViewHolder extends RecyclerView.ViewHolder {
        private final TextView textView;

        public ViewHolder(View view) {
            super(view);
            // Define click listener for the ViewHolder's View

            textView = (TextView) view.findViewById(R.id.textView);
        }

        public TextView getTextView() {
            return textView;
        }
    }

    /**
     * Initialize the dataset of the Adapter
     *
     * @param dataSet String[] containing the data to populate views to be used
     * by RecyclerView
     */
    public CustomAdapter(String[] dataSet) {
        localDataSet = dataSet;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        // Create a new view, which defines the UI of the list item
        View view = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.text_row_item, viewGroup, false);

        return new ViewHolder(view);
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int position) {

        // Get element from your dataset at this position and replace the
        // contents of the view with that element
        viewHolder.getTextView().setText(localDataSet[position]);
    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return localDataSet.length;
    }
}

हर व्यू आइटम का लेआउट, सामान्य तरीके से एक्सएमएल लेआउट फ़ाइल में तय किया जाता है. इस मामले में, ऐप्लिकेशन में इस तरह की text_row_item.xml फ़ाइल होती है:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/list_item_height"
    android:layout_marginLeft="@dimen/margin_medium"
    android:layout_marginRight="@dimen/margin_medium"
    android:gravity="center_vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/element_text"/>
</FrameLayout>

अगले चरण

यह कोड स्निपेट दिखाता है कि आप RecyclerView का इस्तेमाल कैसे कर सकते हैं.

Kotlin


class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val dataset = arrayOf("January", "February", "March")
        val customAdapter = CustomAdapter(dataset)

        val recyclerView: RecyclerView = findViewById(R.id.recycler_view)
        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.adapter = customAdapter

    }

}

Java


RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.layoutManager = new LinearLayoutManager(this)
recyclerView.setAdapter(customAdapter);

लाइब्रेरी में, लागू करने की प्रक्रिया को अपनी पसंद के मुताबिक बनाने के कई तरीके भी हैं. ज़्यादा के लिए जानकारी के लिए, Advanced RecyclerView कस्टमाइज़ेशन.

अन्य संसाधन

Android पर टेस्ट करने के बारे में ज़्यादा जानकारी के लिए, नीचे दिए गए संसाधन देखें.

सैंपल ऐप्लिकेशन