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
相关产品推荐
相关产品推荐

