Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में ListView के लिए कस्टम एडाप्टर कैसे बनाएं?

Android ListView के लिए कस्टम एडाप्टर बनाना

यह उदाहरण दर्शाता है कि BaseAdapter को एक्सटेंड करके कस्टम एडाप्टर कैसे बनाया जाए, जो कस्टम डेटा मॉडल और कस्टम रो लेआउट के साथ ListView में डेटा बाइंड करता है।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio में File → New Project चुनें।

चरण 2: मेन लेआउट (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@android:color/darker_gray"
        android:dividerHeight="1dp"/>

</LinearLayout>

चरण 3: डेटा मॉडल क्लास (MyData.java)

public class MyData {

    private int serialNumber;
    private String name;
    private String mobileNumber;

    public MyData(int serialNumber, String name, String mobileNumber) {
        this.serialNumber = serialNumber;
        this.name = name;
        this.mobileNumber = mobileNumber;
    }

    // Getters
    public int getSerialNumber() { return serialNumber; }
    public String getName() { return name; }
    public String getMobileNumber() { return mobileNumber; }

    // Setters
    public void setSerialNumber(int serialNumber) { this.serialNumber = serialNumber; }
    public void setName(String name) { this.name = name; }
    public void setMobileNumber(String mobileNumber) { this.mobileNumber = mobileNumber; }
}

चरण 4: कस्टम रो लेआउट (res/layout/row.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="12dp"
    android:background="@android:color/white">

    <TextView
        android:id="@+id/serialNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="संख्या"
        android:textColor="@color/colorPrimary"
        android:textSize="14sp" />

    <TextView
        android:id="@+id/studentName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:text="नाम"
        android:textColor="#000000"
        android:textSize="16sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/mobileNum"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:text="मोबाइल नंबर"
        android:textColor="@color/colorAccent"
        android:textSize="14sp" />

</LinearLayout>

चरण 5: कस्टम एडाप्टर (MyAdapter.java)

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;

public class MyAdapter extends BaseAdapter {

    private Context context;
    private ArrayList dataList;
    private LayoutInflater inflater;

    public MyAdapter(Context context, ArrayList dataList) {
        this.context = context;
        this.dataList = dataList;
        this.inflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return dataList.size();
    }

    @Override
    public Object getItem(int position) {
        return dataList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.row, parent, false);
            holder = new ViewHolder();
            holder.serialNumber = convertView.findViewById(R.id.serialNumber);
            holder.name = convertView.findViewById(R.id.studentName);
            holder.mobileNumber = convertView.findViewById(R.id.mobileNum);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        MyData data = dataList.get(position);
        holder.serialNumber.setText("क्रमांक: " + data.getSerialNumber());
        holder.name.setText("नाम: " + data.getName());
        holder.mobileNumber.setText("मोबाइल: " + data.getMobileNumber());

        return convertView;
    }

    // ViewHolder पैटर्न - findViewById कॉल्स कम करता है
    static class ViewHolder {
        TextView serialNumber;
        TextView name;
        TextView mobileNumber;
    }
}

चरण 6: MainActivity (src/MainActivity.java)

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private ArrayList dataList = new ArrayList<>();
    private MyAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.listView);

        // सैंपल डेटा जोड़ें
        dataList.add(new MyData(1, "मशु", "987576443"));
        dataList.add(new MyData(2, "अज़हर", "8787576768"));
        dataList.add(new MyData(3, "नियाज़", "65757657657"));

        adapter = new MyAdapter(this, dataList);
        listView.setAdapter(adapter);
    }
}

चरण 7: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

कस्टम एडाप्टर के मुख्य घटक

मेथड उद्देश्य
getCount() कुल आइटम संख्या लौटाता है
getItem(position) पोजीशन पर डेटा ऑब्जेक्ट लौटाता है
getItemId(position) आइटम का यूनिक ID लौटाता है
getView() प्रत्येक रो के लिए View बनाता/रीसाइकल करता है
💡 ViewHolder पैटर्न: `convertView.setTag(holder)` और `getTag()` का उपयोग करके `findViewById()` कॉल्स को कम करता है, जिससे स्क्रॉलिंग परफॉर्मेंस बेहतर होती है।
🔄 आधुनिक विकल्प: नए ऐप्स के लिए RecyclerView + RecyclerView.Adapter उपयोग करें, जो ViewHolder पैटर्न को अनिवार्य बनाता है और अधिक फीचर्स देता है।

ऐप चलाएं

ऐप लॉन्च करें और कस्टम लेआउट में तीन कॉन्टैक्ट एंट्रीज वाली ListView देखें।

Android में ListView के लिए कस्टम एडाप्टर कैसे बनाएं?

  1. Android में ListView के लिए ArrayList से एलिमेंट कैसे डिलीट करें? Android में ListView के लिए ArrayList से एलिमेंट कैसे डिलीट करें?

    Android में ArrayList और ListView से आइटम हटाने का पूरा गाइड यह उदाहरण दर्शाता है कि ArrayList का उपयोग करके ListView में से विशिष्ट एलिमेंट्स कैसे हटाए जाते हैं। ArrayList रैंडम एक्सेस के लिए ऑप्टिमाइज्ड है। चरण 1: प्रोजेक्ट सेटअप Android Studio में नया प्रोजेक्ट बनाएं: File → New Project। चरण 2:

  1. Android ListView में फुटर (Footer) कैसे जोड़ें? Android ListView में फुटर (Footer) कैसे जोड़ें?

    Android ListView में कस्टम फुटर व्यू जोड़ना ListView के अंत में एक फुटर व्यू (जैसे सूची समाप्त संदेश) जोड़ने का तरीका सीखें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project से प्रोजेक्ट बनाएं। चरण 2: मेन लेआउट में ListView res/layout/activity_main.xml: <RelativeLayout xmlns:and

  1. एंड्रॉयड पर कस्टम जेस्चर कैसे जोड़ें एंड्रॉयड पर कस्टम जेस्चर कैसे जोड़ें

    अपने एंड्रॉयड डिवाइस पर कस्टम जेस्चर बनाना आपके लिए समय बचाने का एक शानदार तरीका है। इन कस्टम जेस्चर को बनाकर, आप अपने डिवाइस को उन मूवमेंट का उपयोग करने के लिए कस्टमाइज़ कर सकते हैं जिनके साथ आप सबसे अधिक सहज हैं, किसी विशेष कार्य को निष्पादित करने के लिए जैसे नया टैब खोलना। क्या यह बहुत अच्छा नही