Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách thêm Custom Adapter cho ListView trong Android

Giới thiệu

Ví dụ này minh họa cách tạo Custom Adapter cho ListView trong Android để hiển thị dữ liệu phức tạp (hình ảnh, nhiều dòng text).

Các bước thực hiện

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Thiết kế giao diện chính (res/layout/activity_main.xml)

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

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

Bước 3: Viết code 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 {
    ListView listView;
    ArrayList<MyData> arrayList = new ArrayList<>();
    MyAdapter adapter;

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

        listView = findViewById(R.id.listView);

        // Thêm dữ liệu mẫu
        arrayList.add(new MyData(1, "Mashu", "0987576443"));
        arrayList.add(new MyData(2, "Azhar", "08787576768"));
        arrayList.add(new MyData(3, "Niyaz", "065757657657"));

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

Bước 4: Tạo model data (MyData.java)

public class MyData {
    private int serialNum;
    private String name;
    private String mobileNumber;

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

    public int getNum() { return serialNum; }
    public void setNum(int num) { this.serialNum = num; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getMobileNumber() { return mobileNumber; }
    public void setMobileNumber(String mobileNumber) { this.mobileNumber = mobileNumber; }
}

Bước 5: Tạo Custom Adapter (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<MyData> arrayList;
    private TextView serialNum, name, contactNum;

    public MyAdapter(Context context, ArrayList<MyData> arrayList) {
        this.context = context;
        this.arrayList = arrayList;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.row, parent, false);
        }

        serialNum = convertView.findViewById(R.id.serailNumber);
        name = convertView.findViewById(R.id.studentName);
        contactNum = convertView.findViewById(R.id.mobileNum);

        MyData data = arrayList.get(position);
        serialNum.setText(String.valueOf(data.getNum()));
        name.setText(data.getName());
        contactNum.setText(data.getMobileNumber());

        return convertView;
    }
}

Bước 6: Tạo layout item (res/layout/row.xml)

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

    <TextView
        android:id="@+id/serailNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Number"
        android:textColor="@color/colorPrimary"
        android:textSize="16sp" />

    <TextView
        android:id="@+id/studentName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Name"
        android:textColor="#000000"
        android:textSize="16sp" />

    <TextView
        android:id="@+id/mobileNum"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Mobile Number"
        android:textColor="@color/colorAccent"
        android:textSize="16sp" />

</LinearLayout>

Bước 7: Cấu hình 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>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run để xem ListView với custom layout.

Cách thêm Custom Adapter cho ListView trong Android