2013-09-29 4 views
52

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

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

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

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

Но все-таки я не могу понять, это ясно!

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

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

Для того, чтобы создать простой ListView я также упомянул следующую ссылку:

Simple ListView using ArrayAdapter example.

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

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

EDIT:

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

ответ

61

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.

+0

, поэтому я понял из вашего ответа, что нам нужно предоставить идентификатор ресурса TextView, если мы создадим сложный TextView или пользовательский TextView, иначе нам это не понадобится или мы можем использовать значение по умолчанию, указанное в файле android.R.id.text1. Я прав? –

+0

Точно. Вам это не нужно, если вы не пытаетесь создать свои собственные представления. – ucsunil

+0

Могу ли я использовать ArrayAdapter > (это, android.R.layout.simple_list_item1)? потому что в моем случае я хочу использовать HashMap, но нет подходящего метода конструктора, который принимает hashmap. –

18

Но опять-таки главное сомнение, почему идентификатор ресурса 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

+0

вы можете сказать мне, что потребность Int textViewResourceId? –

+0

вы хотите, чтобы строка отображалась. поэтому вам нужно текстовое представление. Адаптер использует идентификатор textview в пакете ресурсов Android. Вы также можете использовать другой конструктор arrayadapter или у вас может быть собственный пользовательский адаптер – Raghunandan

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

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

1

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

ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.single_item, eatables); 
3
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects) 

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

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

2

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

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

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

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Gattsu

+0

Хорошо, это хороший совет. Спасибо. :) –

Смежные вопросы