【问题标题】:Listiview with Array带数组的列表视图
【发布时间】:2017-05-23 16:38:49
【问题描述】:

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

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

如何从一个数组中获取多个信息?

非常感谢。

【问题讨论】:

  • 为您的数据创建一个自定义模型,将整个数据存储在该类的一个对象中,然后将这些对象的 ArrayList 传递给 lisview 的适配器

标签: android arrays listview arraylist


【解决方案1】:

当您将 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;
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-17
    相关资源
    最近更新 更多