如何创建查找数组中多个信息的列表视图?
一个例子,假设我有一个数组的名单列表视图,但我还有另一个数组,其中包含与第一个数组的每个名称匹配的年龄和专业等数据。
如何从阵列中获取多个信息?
非常感谢你。
答案 0 :(得分:2)
将ArrayList加载到ArrayAdapter中,然后将ArrayAdapter加载到ListView中时,ArrayAdapter使用包含TextView的布局文件。 ArrayAdapter获取每个ArrayList元素中的字符串,使用每个ArrayList元素的布局膨胀(创建)一个新的View,然后将元素字符串放在每个新布局的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;
}
}