2017-05-23 41 views
-1

如何創建一個在數組中查找多個信息的listview?與數組Listiview

一個例子,假設我有一個數組中名稱的列表視圖,但我仍然有另一個數組包含像年齡和職業等數據匹配每個名稱的第一個數組。

我怎麼能從一個數組中獲得多個信息?

非常感謝。

+0

爲您的數據創建一個自定義模型,將整個數據存儲在該類的對象中,然後將這些對象的ArrayList傳遞給適配器以獲取lisview –

回答

2

將ArrayList加載到ArrayAdapter中,然後將ArrayAdapter加載到ListView中時發生了什麼?ArrayAdapter使用了包含TextView的佈局文件。 ArrayAdapter接受每個ArrayList元素中的字符串,用每個ArrayList元素的佈局膨脹(創建)一個新的View,然後將元素字符串放入每個新佈局的TextView中。

如果要在屏幕列表中自定義每行的視覺外觀(包括出現的數據),可以通過創建一個擴展BaseAdapter的新類來製作自己的自定義適配器,並且可以創建自己的佈局文件你將在BaseAdapter中膨脹。然後在佈局中查找元素,並將數據分配給每行的元素。以下是我爲您寫的示例代碼。我會強烈建議閱讀列表視圖和適配器的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; 
} 
}