it-roy-ru.com

ArrayAdapter в Android для создания простого списка

Я пытался создать Activity в Android, эта активность содержит только ListView больше ничего.

Как я знаю, для заполнения списка нам нужно использовать ArrayAdapter.

Чтобы понять ArrayAdapter, я прочитал следующую ссылку:

http://developer.Android.com/reference/Android/widget/ArrayAdapter.html

Но я все еще не могу понять это ясно!

Одним из самых больших сомнений является то, почему конструктору нужен идентификатор ресурса TextView, в то время как в моей деятельности нет текстовых представлений, что я должен дать?

Я не говорю, что это единственный конструктор, просто я не могу понять логику этого.

Для создания простого списка я также сослался на следующую ссылку:

Простой ListView с использованием примера ArrayAdapter.

Но опять же, мое главное сомнение - зачем ему нужен идентификатор ресурса TextView?

Если кто-нибудь сможет объяснить это на примере, это будет очень полезно.

EDIT:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
          Android.R.layout.simple_list_item_1, Android.R.id.text1, values);
61
Nirav Kamani

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

ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)

По умолчанию ArrayAdapter использует TextView по умолчанию для отображения каждого элемента. Но если вы хотите, вы можете создать свой собственный TextView и реализовать любой сложный дизайн, расширив класс TextView. Это тогда должно войти в макет для вашего использования. Вы можете ссылаться на это в поле textViewResourceId, чтобы привязать объекты к этому представлению вместо значения по умолчанию.

Для вашего использования я бы предложил использовать конструктор:

ArrayAdapter(Context context, int resource, T[] objects). 

В вашем случае это будет:

ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, values)

и это должно быть хорошо. Это будет привязывать каждую строку к отображению TextView по умолчанию - простой и простой белый фон.

Таким образом, чтобы ответить на ваш вопрос, вам не нужно использовать textViewResourceId.

70
ucsunil

Но опять же главное сомнение, зачем ID ресурса TextView ему нужен?

Посмотрите на конструктор и параметры.

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

Добавлен в конструктор API уровня 1

Параметры

context Текущий контекст.

resource Идентификатор ресурса для файла макета, содержащего макет, который используется при создании экземпляров представлений.

textViewResourceId Идентификатор TextView в ресурсе макета, который будет заполнен объектами. Объекты, которые должны быть представлены в ListView.

Android.R.id.text1 ссылается на идентификатор текста в ресурсе Android. Таким образом, вам не нужно иметь один в вашей деятельности.

Вот полный список

http://developer.Android.com/reference/Android/R.id.html

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        Android.R.layout.simple_list_item_1, Android.R.id.text1, values);

this относится к контексту активности

Android.R.layout.simple_list_item_1 simple_list_item_1 - это макет в Android.R.layout.

Android.R.id.text1 ссылается на идентификатор ресурса Android.

values - строковый массив из предоставленной вами ссылки

http://developer.Android.com/reference/Android/R.layout.html

21
Raghunandan
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

Здесь ресурс означает "идентификатор" макета, который вы используете при создании экземпляра представления.

Теперь этот макет имеет много дочерних представлений со своими идентификаторами. Итак, textViewResourceId сообщает, какое дочернее представление нам нужно заполнить данными.

3
Prashant K

Идентификатор ресурса TextView, который ему нужен, предназначен для файла макета TextView, поэтому он не будет в том же действии.

Вы можете создать его, выбрав "Файл"> "Создать"> "XML"> "XML Layout File", и введите тип виджета "TextView" в поле корневого тега.

Источник: https://www.kompulsa.com/the-simplest-way-to-implement-an-Android-listview/

2
Nicholas Brown
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

Я также новичок в Android, так что я могу ошибаться. Но, насколько я понимаю, используя это для создания списка, второй аргумент - это расположение элементов списка. Макет состоит из множества видов (изображение, текст и т.д.). С 3-м аргументом вы указываете, в каком представлении или текстовом представлении вы хотите, чтобы текст отображался.

2
Anuj Mahajan

Вам не нужно использовать идентификатор для просмотра текста. Вы можете узнать больше из Android arrayadapter . Приведенный ниже код инициализирует массив-адаптер.

ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.single_item, eatables);
1
Rajat Ghai

Ответ на ваш вопрос: Android.R.id.text1: int: Идентификатор TextView в ресурсе макета, который нужно заполнить.

ArrayAdapter имеет так много конструкторов с разным количеством аргументов, я упомяну некоторые из них

ArrayAdapter(Context context, int resource)
ArrayAdapter(Context context, int resource, int textViewResourceId)
ArrayAdapter(Context context, int resource, T[] objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
ArrayAdapter(Context context, int resource, List<T> objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

Теперь вы можете понять, что каждый конструктор отличается, и они использовали разные списки аргументов.

И простой ответ: вы можете использовать ArrayAdapter с текстовым представлением внутри целевого XML-файла или без него. Это не имеет значения. И вам не нужно указывать идентификатор представления текста, вы можете использовать его без. Но вам может потребоваться перейти к какому-либо дополнительному варианту с простым представлением списка, вы должны использовать текстовое представление.!

Вот пример примера

ArrayAdapter adapter = new ArrayAdapter<String>(this,R.layout.ListView,StringArray);
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);

Это также правильный код, который вы можете использовать с гораздо более понятным.

1
Sahan Pasindu Nirmal

Если у вас есть несколько представлений в файле макета Android.R.layout.simple_list_item_1, вам нужно будет передать третий аргумент Android.R.id.text1, чтобы указать представление, которое должно быть заполнено элементами массива (значениями). Но если у вас есть только одно представление в вашем файле макета, нет необходимости указывать третий аргумент.

0
Himanshu Singh