Ví dụ này minh họa cách hiển thị danh sách có CheckBox trong ListView, dữ liệu từ model (giả lập database) với CustomAdapter.
Bước 1: Tạo dự án mới
Tạo dự án mới trong Android Studio.
Bước 2: Layout chính (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="wrap_content"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>
Bước 3: Layout item (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="10dp">
<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_alignParentTop="true" />
</RelativeLayout>
Bước 4: Model 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;
}
}
Bước 5: 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); } @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); // Xử lý click checkbox viewHolder.checkBox.setOnClickListener(v -> { item.checked = ((CheckBox) v).isChecked(); }); return result; } }
Bước 6: 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 {
ArrayList dataModels;
ListView listView;
CustomAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
dataModels = new ArrayList<>();
// Dữ liệu mẫu (thay bằng query database thực tế)
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));
// ... thêm các item khác
adapter = new CustomAdapter(dataModels, getApplicationContext());
listView.setAdapter(adapter);
// Click item để toggle checkbox
listView.setOnItemClickListener((parent, view, position, id) -> {
DataModel model = dataModels.get(position);
model.checked = !model.checked;
adapter.notifyDataSetChanged();
});
}
}
Bước 7: Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.app.sample">
<application ...>
<activity android:name=".MainActivity">...</activity>
</application>
</manifest>
Chạy ứng dụng
ListView hiển thị tên kèm CheckBox, click item hoặc checkbox đều toggle trạng thái.