Задать список из объекта массива объектов
У меня есть listactivity, который отобразит список имен и адресов людей с данными из arraylist объектов. здесь метод заполнения списка до сих пор..
private void fillData(ArrayList<Person> messages) {
//populating list should go here
}
Класс person - это имя и адрес пользователя.
public class Person {
String name;
String address;
}
Хотя мой список для моего списка состоит из двух текстовых полей, например:
<TwoLineListItem xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:mode="twoLine"
android:clickable="false"
android:paddingBottom="9dp"
android:paddingTop="5dp" >
<TextView
android:id="@+id/display_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/display_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/display_name"
android:layout_below="@+id/display_name"
android:textAppearance="?android:attr/textAppearanceSmall" />
Я хочу, чтобы каждый элемент в моем списке отображал как имя, так и адрес каждого человека. Кто-нибудь может помочь?
Спасибо заранее, и извините за мой плохой английский...
Ответы
Ответ 1
В вашей деятельности
AdapterPerson adbPerson;
ArrayList<Person> myListItems = new ArrayList<Person>();
//then populate myListItems
adbPerson= new AdapterPerson (youractivity.this, 0, myListItems);
listview.setAdapter(adbPerson);
Адаптер
public class AdapterPerson extends ArrayAdapter<Person> {
private Activity activity;
private ArrayList<Person> lPerson;
private static LayoutInflater inflater = null;
public AdapterPerson (Activity activity, int textViewResourceId,ArrayList<Person> _lPerson) {
super(activity, textViewResourceId, _lProducts);
try {
this.activity = activity;
this.lPerson = _lPerson;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
} catch (Exception e) {
}
}
public int getCount() {
return lPerson.size();
}
public Product getItem(Product position) {
return position;
}
public long getItemId(int position) {
return position;
}
public static class ViewHolder {
public TextView display_name;
public TextView display_number;
}
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
final ViewHolder holder;
try {
if (convertView == null) {
vi = inflater.inflate(R.layout.yourlayout, null);
holder = new ViewHolder();
holder.display_name = (TextView) vi.findViewById(R.id.display_name);
holder.display_number = (TextView) vi.findViewById(R.id.display_number);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
holder.display_name.setText(lProducts.get(position).name);
holder.display_number.setText(lProducts.get(position).number);
} catch (Exception e) {
}
return vi;
}
}
Ответ 2
Это мое решение проблемы с адаптером пользовательского списка.
Сначала пользовательский массив:
public class MemoListAdapter extends ArrayAdapter<MemoEntry> {
private int layoutResourceId;
private static final String LOG_TAG = "MemoListAdapter";
public MemoListAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
layoutResourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
try {
MemoEntry item = getItem(position);
View v = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(layoutResourceId, null);
} else {
v = convertView;
}
TextView header = (TextView) v.findViewById(R.id.list_memo_item_header);
TextView description = (TextView) v.findViewById(R.id.list_memo_item_text);
header.setText(item.getHeader());
description.setText(item.getValue());
return v;
} catch (Exception ex) {
Log.e(LOG_TAG, "error", ex);
return null;
}
}
}
и в методе onCreate активности:
adapter = new MemoListAdapter(this, R.layout.list_memo_item_layout); // the adapter is a member field in the activity
setContentView(R.layout.activity_view_memo_layout);
ListView lv = (ListView) findViewById(R.id.view_memo_memo_list);
lv.setAdapter(adapter);
а затем я загружаю адаптер после некоторого вызова следующим образом:
ArrayList<MemoEntry> memoList = new ArrayList<MemoEntry>(); //here you should use a list with some content in it
adapter.addAll(memoList);
Итак, чтобы адаптировать это решение к вашему решению, создайте свой собственный пользовательский адаптер, а вместо моего объекта MemoEntry используйте свой класс Person.
В методе getView измените его в соответствии с вашими потребностями. Это примерно так же, как то, что я делаю, не должно быть слишком тяжелым.
Надеюсь, это поможет вам немного!