Подтвердить что ты не робот

Задать список из объекта массива объектов

У меня есть 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" />

Я хочу, чтобы каждый элемент в моем списке отображал как имя, так и адрес каждого человека. Кто-нибудь может помочь?

Спасибо заранее, и извините за мой плохой английский...

4b9b3361

Ответ 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 измените его в соответствии с вашими потребностями. Это примерно так же, как то, что я делаю, не должно быть слишком тяжелым.

Надеюсь, это поможет вам немного!