यह उदाहरण दर्शाता है कि Android में डेटाबेस (या डेटा सोर्स) से डेटा लेकर CheckBox वाले ListView में कैसे बाइंड किया जाता है। कस्टम एडॉप्टर और व्यू होल्डर पैटर्न का उपयोग किया गया है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project।
चरण 2: मेन लेआउट
res/layout/activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
चरण 3: रो आइटम लेआउट
res/layout/row_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<TextView
android:id="@+id/txtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:textSize="16sp" />
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true" />
</RelativeLayout>
चरण 4: डेटा मॉडल
src/DataModel.java:
package com.app.sample;
public class DataModel {
public String name;
public boolean checked;
public DataModel(String name, boolean checked) {
this.name = name;
this.checked = checked;
}
}
चरण 5: कस्टम एडॉप्टर
src/CustomAdapter.java:
package com.app.sample; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.TextView; import androidx.annotation.NonNull; import java.util.ArrayList; public class CustomAdapter extends ArrayAdapter{ private ArrayList dataSet; private Context mContext; static class ViewHolder { TextView txtName; CheckBox checkBox; } public CustomAdapter(ArrayList data, Context context) { super(context, R.layout.row_item, data); this.dataSet = data; this.mContext = context; } @Override public int getCount() { return dataSet.size(); } @Override public DataModel getItem(int position) { return dataSet.get(position); } @NonNull @Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { ViewHolder viewHolder; View result; if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent, false); viewHolder.txtName = convertView.findViewById(R.id.txtName); viewHolder.checkBox = convertView.findViewById(R.id.checkBox); result = convertView; convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); result = convertView; } DataModel item = getItem(position); viewHolder.txtName.setText(item.name); viewHolder.checkBox.setChecked(item.checked); // चेकबॉक्स क्लिक लिस्टनर (ऑप्शनल) viewHolder.checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> { item.checked = isChecked; }); return result; } }
चरण 6: MainActivity
package com.app.sample;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private ArrayList dataModels;
private ListView listView;
private CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
dataModels = new ArrayList<>();
// सैंपल डेटा (डेटाबेस से आने वाला डेटा मान लें)
dataModels.add(new DataModel("Apple Pie", false));
dataModels.add(new DataModel("Banana Bread", false));
dataModels.add(new DataModel("Cupcake", false));
dataModels.add(new DataModel("Donut", true));
dataModels.add(new DataModel("Eclair", true));
dataModels.add(new DataModel("Froyo", true));
dataModels.add(new DataModel("Gingerbread", true));
dataModels.add(new DataModel("Honeycomb", false));
dataModels.add(new DataModel("Ice Cream Sandwich", false));
dataModels.add(new DataModel("Jelly Bean", false));
dataModels.add(new DataModel("KitKat", false));
dataModels.add(new DataModel("Lollipop", false));
dataModels.add(new DataModel("Marshmallow", false));
dataModels.add(new DataModel("Nougat", false));
adapter = new CustomAdapter(dataModels, getApplicationContext());
listView.setAdapter(adapter);
// आइटम क्लिक पर चेकबॉक्स टॉगल
listView.setOnItemClickListener((parent, view, position, id) -> {
DataModel model = dataModels.get(position);
model.checked = !model.checked;
adapter.notifyDataSetChanged();
});
}
}
चरण 7: AndroidManifest.xml
मानक मैनिफेस्ट।
मॉडर्न अल्टरनेटिव: RecyclerView + Room Database
नए प्रोजेक्ट्स के लिए:
- Room Database - SQLite अब्स्ट्रैक्शन
- RecyclerView - ListView से बेहतर परफॉरमेंस
- ViewBinding/DataBinding - findViewById की जरूरत नहीं
- LiveData/Flow - ऑब्जर्वेबल डेटा
ऐप चलाएं
डिवाइस कनेक्ट करें, Run करें। लिस्ट आइटम पर क्लिक करके चेकबॉक्स टॉगल करें।
