当您将 ArrayList 加载到 ArrayAdapter 中,然后将 ArrayAdapter 加载到 ListView 中时,会发生什么情况,即 ArrayAdapter 使用包含 TextView 的布局文件。 ArrayAdapter 获取每个 ArrayList 元素中的字符串,为每个 ArrayList 元素扩展(创建)一个带有布局的新视图,然后将元素字符串放置在每个新布局的 TextView 中。
如果您想自定义屏幕列表中每一行的视觉外观(包括显示的数据),您可以通过创建一个扩展 BaseAdapter 的新类来制作您自己的自定义适配器,您可以制作您自己的布局文件将在 BaseAdapter 中膨胀。然后在您的布局中找到元素并按每行将数据分配给元素。以下是我为您编写的示例代码。我强烈建议阅读有关 ListViews 和 Adapters 的 Android 文档:https://developer.android.com/guide/topics/ui/layout/listview.html
https://developer.android.com/guide/topics/ui/declaring-layout.html#AdapterViews
在我的活动 OnCreate 方法中(您需要在布局中有一个名为 list_view 的 ListView 或在我的代码中更改 ListView 的名称):
ArrayList<MyDataModel> myDataModels = new ArrayList<>();
for(int i = 0; i < 50; i++) {
MyDataModel newModel = new MyDataModel("Person" + i, new Random().nextInt() % 100, "Some Profession" + i);
myDataModels.add(newModel);
}
MyListAdapter myListAdapter = new MyListAdapter(myDataModels);
ListView listView = (ListView)findViewById(R.id.list_view);
listView.setAdapter(myListAdapter);
MyDataModel.java:
public class MyDataModel {
public String mName, mProfession;
public int mAge;
public MyDataModel(String name, int age, String profession) {
mName = name;
mAge = age;
mProfession = profession;
}
}
MyListAdapter.java:
public class MyListAdapter extends BaseAdapter {
private ArrayList<MyDataModel> mMyDataModels;
public MyListAdapter(ArrayList<MyDataModel> dataModels) {
mMyDataModels = dataModels;
}
@Override
public int getCount() {
return mMyDataModels.size();
}
@Override
public MyDataModel getItem(int position) {
return mMyDataModels.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if(view == null) {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_data_model_item, parent, false);
}
MyDataModel model = mMyDataModels.get(position);
((TextView)view.findViewById(R.id.person_name)).setText(model.mName);
((TextView)view.findViewById(R.id.person_age)).setText(String.valueOf(model.mAge));
((TextView)view.findViewById(R.id.person_profession)).setText(model.mProfession);
return view;
}
}