Присвоить свойство объекта списку - PullRequest
4 голосов
/ 25 мая 2011

У меня есть ArrayList объекта, который имеет свойства Object.name и Object.url.

Я хочу перебрать ArrayList и применить «имя» объекта к Android ListView. Я также хочу сохранить другие свойства объекта в такте, чтобы я мог вызывать свойство "url" в методе onClick.

То, что у меня сейчас есть, это:

main_list.setAdapter(new ArrayAdapter<RomDataSet>(this, android.R.layout.simple_list_item_1, android.R.id.text1, mRoms));

Но ясно, что это не то, что мне нужно ...

Любая помощь будет оценена :)

1 Ответ

10 голосов
/ 25 мая 2011

1.) У вас есть ArrayList:

main_list

2.) Создайте ListView в своем XML-файле (скажем, main.xml) и получите его идентификатор. То есть дано:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/liveFeed"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>
</LinearLayout>

Сделайте что-то вроде этого:

ListView livefeed = (ListView)this.findViewById(R.id.liveFeed);

в вашей деятельности (если вы находитесь где-то еще, например в OnClickListener, замените «this» на переменную View, которая была передана как переменная в OnClickListener).

3.) Определите свой ArrayAdapter. Обратите внимание, что один из его параметров (третий в вашем случае) будет идентификатором TextView. Это связано с тем, что класс ArrayAdapter по умолчанию возвращает TextView в ListView. Если вы переопределите класс ArrayAdapter, вы можете использовать собственные макеты, чтобы иметь элементы с настраиваемыми представлениями в вашем ListView, но это не обязательно для того, что вы обрисовали в общих чертах в своем вопросе, и кажется, что вы его уже получили.

4.) Установите для адаптера значение ListView (для объекта ArrayAdapter с именем 'aa'):

livefeed.setAdapter(aa);

Теперь способ работы ArrayAdapter заключается в том, что он вызывает метод toString () каждого объекта и устанавливает для каждого TextView в ListView эту строку. Поэтому создайте метод toString () в классе вашего объекта, который возвращает его свойство name:

public String toString(){return name;} //assuming name is a String

Также обратите внимание, что, если вы добавляете Objects в ArrayList, уведомите об имеющемся у вас ArrayAdapter, чтобы он мог соответственно обновить ваш ListView с изменениями (учитывая ArrayAdapter с именем 'aa'):

aa.notifyDataSetChanged();

Дайте мне знать, если вам понадобится дополнительная помощь. Как всегда, отметьте галочкой ответ, если это ответило на ваш вопрос.

Также обратите внимание, что в какой-то момент вы можете захотеть сделать перекрестную ссылку на ваш ArrayAdapter и ArrayList между вашей деятельностью и классом Object. Для этого очень полезно сделать эти поля статичными.

EDIT:

Вы также хотели узнать, как получить доступ к определенному объекту при нажатии на элемент в ListView. Вот оно (если ваш ListView называется livefeed):

livefeed.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int position, long id) {

    //in here you may access your Object by using livefeed.getItemAtPosition(position)
    //for example:
        Object current = livefeed.getItemAtPosition(position);
        //do whatever with the Object's data
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...