Listiview with Array

时间:2017-05-23 16:38:50

标签: android arrays listview arraylist

如何创建查找数组中多个信息的列表视图?

一个例子,假设我有一个数组的名单列表视图,但我还有另一个数组,其中包含与第一个数组的每个名称匹配的年龄和专业等数据。

如何从阵列中获取多个信息?

非常感谢你。

1 个答案:

答案 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;
}
}