Адаптер массива в Android, чтобы создать простой ListView с
Я пытался создать Activity в Android эта активность содержит только ListView ничего другого.
как я знаю, чтобы заполнить listview нам нужно использовать ArrayAdapter.
Итак, чтобы понять ArrayAdapter я прочитал следующую ссылку:
http://developer.android.com/reference/android/widget/ArrayAdapter.html
но все же я не могу понять это ясно!
одно из самых больших сомнений заключается в том, почему конструктор нуждается в TextView идентификатор ресурса в то время как моя деятельность не имеет каких-либо TextViews, что я должен был бы дать ему?
Я не говорю, что это единственный конструктор, просто я не могу понять логику позади него.
для того, чтобы создать простой listview я также сослался на следующую ссылку:
простой ListView с помощью примера ArrayAdapter.
но опять же мое главное сомнение в том, зачем ему нужен ресурс TextView удостоверение?
если кто-нибудь может объяснить это на примере, это будет очень полезно.
EDIT:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
7 ответов:
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.
но опять же главное сомнение, почему TextView идентификатор ресурса ему нужен?
посмотрите на конструктор и параметры.
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)добавлено в конструктор уровня 1 API
параметры
contextв текущем контексте.
resourceидентификатор ресурса для a файл макета, содержащий макет для использования при создании представлений.
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_1simple_list_item_1 это макет в андроид.R. макет.
android.R.id.text1относится к идентификатору ресурса android.
valuesэто массив строк из ссылки, которую вы предоставилиhttp://developer.android.com/reference/android/R.layout.html
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)здесь ресурс означает "идентификатор" макета, который вы используете при создании экземпляра представления.
теперь, этот макет имеет много дочерних представлений с собственными идентификаторами. Итак,
textViewResourceIdуказывает, какое дочернее представление нам нужно заполнить данными.
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)Я тоже новичок в Android , поэтому я могу ошибаться. Но согласно моему пониманию при использовании этого для создания listview 2-й аргумент-это макет элементов списка. Макет состоит из множества представлений (представление изображения,текст и т. д.). С помощью 3-го аргумента вы указываете, в каком представлении или textview вы хотите, чтобы текст отображался.
идентификатор ресурса TextView, который ему нужен, предназначен для файла макета TextView, поэтому он не будет в том же действии.
вы можете создать его, перейдя в File > New > XML > XML Layout File и введите тип виджета, который является "TextView" в поле корневого тега.
Источник:https://www.kompulsa.com/the-simplest-way-to-implement-an-android-listview/
вам не нужно использовать id для textview. Вы можете узнать больше из Android arrayadapter. Приведенный ниже код инициализирует arrayadapter.
ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.single_item, eatables);
на ваш вопрос ответ
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);Это также действительный код, который вы можете использовать с гораздо более ясным.
Comments