You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何显示含多字段对象的ArrayList

在Android Studio中用ListView展示多字段对象列表

你可以通过自定义列表项布局和自定义Adapter来实现多字段显示,步骤如下:

1. 定义数据模型类

先创建你的Person类,封装需要展示的字段:

public class Person {
    private String firstName;
    private String lastName;
    private String address;

    // 构造方法
    public Person(String firstName, String lastName, String address) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.address = address;
    }

    // 生成每个字段的getter方法
    public String getFirstName() { return firstName; }
    public String getLastName() { return lastName; }
    public String getAddress() { return address; }
}

2. 创建列表项布局

在res/layout下新建list_item_person.xml,为每个对象的多个字段设置对应的TextView:

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

    <!-- 显示姓名 -->
    <TextView
        android:id="@+id/tv_full_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:textStyle="bold"/>

    <!-- 显示地址 -->
    <TextView
        android:id="@+id/tv_address"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:textColor="@android:color/darker_gray"
        android:layout_marginTop="4dp"/>
</LinearLayout>

3. 自定义Adapter

继承BaseAdapter,在getView方法中把数据绑定到列表项的控件上,用ViewHolder优化性能:

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 PersonAdapter extends BaseAdapter {
    private Context mContext;
    private ArrayList<Person> mPersonList;

    public PersonAdapter(Context context, ArrayList<Person> personList) {
        mContext = context;
        mPersonList = personList;
    }

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

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

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

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

        // 复用convertView减少内存开销
        if (convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item_person, parent, false);
            holder = new ViewHolder();
            holder.tvFullName = convertView.findViewById(R.id.tv_full_name);
            holder.tvAddress = convertView.findViewById(R.id.tv_address);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        // 获取当前位置的Person对象,绑定数据到控件
        Person currentPerson = mPersonList.get(position);
        holder.tvFullName.setText(currentPerson.getFirstName() + " " + currentPerson.getLastName());
        holder.tvAddress.setText(currentPerson.getAddress());

        return convertView;
    }

    // ViewHolder类,缓存列表项的控件
    static class ViewHolder {
        TextView tvFullName;
        TextView tvAddress;
    }
}

4. 在Activity中配置ListView

在你的Activity布局(比如activity_main.xml)中添加ListView:

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

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

</LinearLayout>

然后在Activity的onCreate方法中初始化数据、Adapter并绑定到ListView:

import android.os.Bundle;
import android.widget.ListView;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

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

        // 准备测试数据
        ArrayList<Person> personList = new ArrayList<>();
        personList.add(new Person("John", "Doe", "123 Main St, New York"));
        personList.add(new Person("Jane", "Smith", "456 Oak Ave, London"));
        personList.add(new Person("Bob", "Brown", "789 Pine Rd, Paris"));

        // 初始化ListView并设置Adapter
        ListView listView = findViewById(R.id.list_view);
        PersonAdapter adapter = new PersonAdapter(this, personList);
        listView.setAdapter(adapter);
    }
}

这样运行后,ListView的每一行就会显示Person对象的姓名和地址,每个对象占一行上下排列。

内容的提问来源于stack exchange,提问作者StClown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 08:30:36