অ্যান্ড্রয়েডে ডাটাবেস থেকে CheckBox যুক্ত ListView-এ ডেটা বাইন্ড করা
এই উদাহরণটি দেখায় কিভাবে একটি কাস্টম অ্যাডাপ্টার ব্যবহার করে ডেটা মডেল (নাম এবং চেক স্টেট) একটি ListView-এ CheckBox সহ প্রদর্শন করা যায়। এখানে ডেমোর জন্য ডাটাবেসের পরিবর্তে ArrayList ব্যবহার করা হয়েছে।
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে File → New Project এ যান এবং একটি নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: মেইন লেআউট (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="wrap_content"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
ধাপ ৩: রো আইটেম লেআউট (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="10dp">
<TextView
android:id="@+id/txtName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
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_alignParentRight="true"
android:layout_alignParentTop="true" />
</RelativeLayout>
ধাপ ৪: 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;
}
}
ধাপ ৫: 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<DataModel> {
private ArrayList<DataModel> dataSet;
private Context mContext;
// ViewHolder প্যাটার্ন
private static class ViewHolder {
TextView txtName;
CheckBox checkBox;
}
public CustomAdapter(ArrayList<DataModel> 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);
}
@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);
return result;
}
}
ধাপ ৬: MainActivity.java
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<DataModel> 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(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
DataModel dataModel = dataModels.get(position);
dataModel.checked = !dataModel.checked;
adapter.notifyDataSetChanged();
}
});
}
}
ধাপ ৭: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.app.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>
অ্যাপটি চালান
ডিভাইস সংযুক্ত করে Run ক্লিক করুন। লিস্টে প্রতিটি আইটেমের পাশে চেকবক্স থাকবে। আইটেমে ক্লিক করলে চেক স্টেট টগল হবে।
