Я немного разбираюсь в пользовательских массивах ArrayAdapters для ListViews, и, расширяя их, я всегда просто передавал -1 (несуществующий идентификатор ресурса) в качестве аргумента ресурса super. Есть ли какие-либо потенциальные выгоды (вообще) для передачи чего-либо еще в этом месте, когда вы также переопределяете getView?При расширении массива ArrayAdapter и переопределении getView передаются аргументы resource/textViewResourceId полностью избыточными?
ответ
Есть ли какие-либо потенциальные преимущества (вообще) для передачи чего-либо еще в этом месте, когда вы также переопределяете getView?
Конечно. Если вы передадите свой фактический макет и TextView
Идентификатор ресурса, вы можете позволить методу super.getView()
обрабатывать инфляцию и назначать текст на одном TextView
. Тогда ваш getView()
переопределить просто нужно «заполнить пробелы».
Например, скажем, мы имеем следующий простой класс элемента списка:
public class Item {
String text;
int imageResId;
public Item(String text, int imageResId) {
this.text = text;
this.imageResId = imageResId;
}
@Override
public String toString() {
return text;
}
}
И простой макет элемента, как так:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<ImageView android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView android:id="@+id/item_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Тогда наш ArrayAdapter
подкласс может быть просто:
public class MyAdapter extends ArrayAdapter<Item> {
public MyAdapter(Context context, List<Item> items) {
super(context, R.layout.list_item, R.id.item_text, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
((ImageView) v.findViewById(R.id.item_image))
.setImageResource(getItem(position).imageResId);
return v;
}
}
Обратите внимание, что мы реализуем переопределение toString()
в нашей Item
класс для обеспечения правильного String
до ArrayAdapter
.
super(context, R.layout.list_item_layout, R.id.item_text_inside_layout, items);
3-й параметр полезен, если вы хотите использовать пользовательский макет для ListView/Gridview.
ArrayAdapter использует Object.toString()
, чтобы получить значение каждого элемента в Listview. Он должен иметь TextView для отображения. Итак, у вас есть три варианта:
Используйте макет по умолчанию для текстового элемента. например
android.R.layout.simple_list_item_1
Используйте настраиваемый макет для текстового элемента и предоставляйте textViewId для размещения ваших данных.
super(context, R.layout.list_item_layout, R.id.item_text_inside_layout, items);
Используйте специальный адаптер, а не
ArrayAdapter
. Вы можете расширитьBaseAdapter
и раздуть, какой вид вы хотите
Надеюсь, что это поможет!
Я смотрел на документ и думал, что getView был объявлен только в ArrayAdapter, поэтому было смущено точно о том, как именно работала Base или ListAdapter, я видел ваш комментарий и так немного поработал в документах и увидел, что он был фактически объявлен в Adapter -дох! - спасибо, мне нужно немного больше привыкнуть к навигации по документации :) –
- 1. Проблема стиля при переопределении getDropDownView в ArrayAdapter
- 2. ArrayAdapter getView не называется
- 3. getView из настроенного массива ArrayAdapter не называется
- 4. ArrayAdapter getView() не называется
- 5. ArrayAdapter getView возвращает NullPointerException -
- 6. getView() для ArrayAdapter медленный
- 7. Когда getView() в ArrayAdapter называется
- 8. getView настраиваемого ArrayAdapter не называется
- 9. Выполнение транзакции firebase в ArrayAdapter и getView
- 10. GetView обычая ArrayAdapter не вызывается
- 11. Custom ArrayAdapter setBackground в getView
- 12. getView в ArrayAdapter не называется
- 13. ArrayAdapter - как остановить вызовы getView?
- 14. Кто вызывает getView() в ArrayAdapter?
- 15. ArrayAdapter GetView положение не верно
- 16. NullPointerException переопределение GetView в arrayadapter
- 17. переопределить getView в ArrayAdapter и по-прежнему держать флажки?
- 18. ArrayAdapter's getView и AndroidAnnotations
- 19. Как передать информацию в getView пользовательского ArrayAdapter?
- 20. Аргументы VB не передаются
- 21. Как аргументы передаются процессам?
- 22. Какие аргументы передаются в msiexec при удалении
- 23. ArrayAdapter метод getView триггер только первый элемент
- 24. ArrayAdapter: переменная аргумента getView изменена на окончательную
- 25. как аргументы передаются методу codeigniter
- 26. Android - Проблемы с getView() в Custom ArrayAdapter
- 27. Метод GetView() из пользовательского ArrayAdapter не выполняется
- 28. Обновление ArrayAdapter изнутри onClickListener в getView
- 29. Как изменить аргументы при расширении функции jQuery
- 30. Как передать аргументы при расширении метода jQuery?
Это была моя первая мысль, она быстро пробовала, но пренебрегала вызовом super.getView. Очень хорошо собрал пример, который может по крайней мере вырезать пару строк, спасибо :) –
Нет проблем. Следует отметить, что если вы передаете недопустимый ресурс компоновки в конструкторе, вы не хотите называть 'super.getView()', или вы получите «Ресурсы $ NotFoundException». –