Comments 38
UFO just landed and posted this here
Спасибо за статью! побольше бы статей по разработке
+3
Пожалуйста! Действительно, статей по разработке под Андроид маловато.
+2
Спасибо за то что поделились опытом! Очень полезно.
0
Перенесите, пожалуйста, в Android.
0
Перенес
+3
Будем рады, если опубликуешь статью на нашем форуме — androidforums.ru/Stati-ishodniki-sovety-f9.html
-3
- 1. Размеры нужно писать в dip, иначе ваш пример будет по разному выглядеть на различных устройствах.
- 2. Вариант подходит только для небольшого количество пунктов, которые не будут прокручиваться, т.к. View row = inflater.inflate(R.layout.select_account_item, parent, false); довольно затратная операция. А также в методе getView не переиспользуются view, и они каждый раз создаются заново.
+2
посоветуйте, плиз, книгу по яве.
я искал на озоне: по адроиду там старые книги, а по яве — сами знаете какой зоопарк, не знаю что выбрать.
я искал на озоне: по адроиду там старые книги, а по яве — сами знаете какой зоопарк, не знаю что выбрать.
-1
У тебя адаптер с твоем случае медленно работает. Самое быстрое сделать так:
public final class AccountsTypesListAdapter extends ArrayAdapter<AccountType> { private Activity context; private List<AccountType> accountTypes; private LayoutInflater mInflater; public AccountsTypesListAdapter(Activity context, List<AccountType> accountTypes) { super(context, R.layout.select_account_item, accountTypes); this.context = context; this.accountTypes = accountTypes; mInflater = context.getLayoutInflater(); } @Override public View getView(int position, View convertView, ViewGroup parent) { ItemViewHolder itemViewHolder = null; if (convertView == null) { convertView = mInflater.inflate(R.layout.select_account_item, parent, false); itemViewHolder = new ItemViewHolder(); itemViewHolder.tvLabel = (TextView) convertView.findViewById(R.id.text_item); itemViewHolder.ivIcon = (ImageView) convertView.findViewById(R.id.icon_item); convertView.setTag(itemViewHolder); } else { itemViewHolder = (ItemViewHolder) convertView.getTag(); } itemViewHolder.tvLabel.setText(accountTypes.get(position).title); itemViewHolder.ivIcon.setImageResource(accountTypes.get(position).bigIconId); return convertView; } private class ItemViewHolder { public TextView tvLabel; public ImageView ivIcon; } }
+1
Ух ты, интересно
0
посмотри презентации с последнего google i/o — там в pdf есть code.google.com/intl/ru-RU/events/io/2010/sessions.html#Android
конкретно по listview и адаптерам тут — dl.google.com/googleio/2010/android-world-of-listview-android.pdf
конкретно по listview и адаптерам тут — dl.google.com/googleio/2010/android-world-of-listview-android.pdf
0
Извиняюсь за не слишком интеллектуальный вопрос, но я хотел бы прояснить для себя принцип работы данного адаптера, т.к. я тоже изучаю Андроида.
При скроллинге списка, в отображаемую область попадают новые элементы списка, для каждого заново отображаемого элемента вызывается метод getView, который должен возвращать представление (View) для данного элемента. Если элемент уже был на экране, то в метод передается существующий View. Т.к. inflate требует значительных затрат, то лучше его не вызывать, если есть этот существующий View. Дочерние View'ы тоже сохраняются, и их так же лучше не пересоздавать, но то, что в layout-е непосредственно не описано, не сохраняется, поэтому изображение и текст придется переприсваивать заново.
Все я верно понял или что-то упустил?
При скроллинге списка, в отображаемую область попадают новые элементы списка, для каждого заново отображаемого элемента вызывается метод getView, который должен возвращать представление (View) для данного элемента. Если элемент уже был на экране, то в метод передается существующий View. Т.к. inflate требует значительных затрат, то лучше его не вызывать, если есть этот существующий View. Дочерние View'ы тоже сохраняются, и их так же лучше не пересоздавать, но то, что в layout-е непосредственно не описано, не сохраняется, поэтому изображение и текст придется переприсваивать заново.
Все я верно понял или что-то упустил?
0
По android sdk мне вполне хватает двух книг:
+ официальная документация официального сайта + google-группа по андроиду.
А по Java я бы посоветовал Thinking in Java (Философия Java) Брюса Эккеля
P.S. Кстати, я бы не сказал, что указанные выше книги по андроиду устаревшие. 2-я версия платформы какникак описывается
+ официальная документация официального сайта + google-группа по андроиду.
А по Java я бы посоветовал Thinking in Java (Философия Java) Брюса Эккеля
P.S. Кстати, я бы не сказал, что указанные выше книги по андроиду устаревшие. 2-я версия платформы какникак описывается
0
Сам новичок в Android, поэтому не буду давать советов, а выскажу лишь несколько наблюдений и мыслей вслух)
1. AccountsTypesListAdapter можно было наследовать сразу от BaseAdapter. В приложении с несколькими подобными меню было бы удобней.
2. Может быть, есть смысл создавать вьюшник элемента списка не из xml, а в рантайме? Это быстрее и надёжнее.
3. Данный адаптер можно использовать не только в AlertDialog, но и в любом одноуровневом ListView.
З.Ы. Автор — молодец.
1. AccountsTypesListAdapter можно было наследовать сразу от BaseAdapter. В приложении с несколькими подобными меню было бы удобней.
2. Может быть, есть смысл создавать вьюшник элемента списка не из xml, а в рантайме? Это быстрее и надёжнее.
3. Данный адаптер можно использовать не только в AlertDialog, но и в любом одноуровневом ListView.
З.Ы. Автор — молодец.
0
1. А разница?
2. Так в дальнейшем проще стилизовать и реюзать вид. А чем быстрее и надёжнее?
2. Так в дальнейшем проще стилизовать и реюзать вид. А чем быстрее и надёжнее?
0
1. Разница в . Мне кажется лучше оставить здесь пространство для использования разного контента, написать более общий адаптер. Впрочем, это придирки.
2. Про стилизовать и реюзать — согласен. Но, во-первых, Inflator чертовски долго работает, как уже было сказано выше, а во-вторых, xml — потенциальный источник багов.
2. Про стилизовать и реюзать — согласен. Но, во-первых, Inflator чертовски долго работает, как уже было сказано выше, а во-вторых, xml — потенциальный источник багов.
0
1. Альтернатива — только курсор-адаптер, а там это делалось бы через SimpleCursorAdapter.ViewBinder.
2. Скорость — да, в таком простом случае было бы не сложнее создать кодом и выиграть в скорости, а баги какие возможны?
2. Скорость — да, в таком простом случае было бы не сложнее создать кодом и выиграть в скорости, а баги какие возможны?
0
1. Т.е.? Вы о чём? Адаптер можно написать любой. Я за более общий.
2. Не надо забывать, что xml — отдельный файл. С ним может произойти всё, что угодно от повреждения до подмены содержания. Плюс при использовании собственных вьюшников в xml могут повылезать проблемы с загрузкой классов. Гляньте в исходники Inflator и посмотрите, откуда у него exception'ы «растут».
2. Не надо забывать, что xml — отдельный файл. С ним может произойти всё, что угодно от повреждения до подмены содержания. Плюс при использовании собственных вьюшников в xml могут повылезать проблемы с загрузкой классов. Гляньте в исходники Inflator и посмотрите, откуда у него exception'ы «растут».
0
Общее пожелание:
Не мельчите со шрифтом. Все у кого глазки плохо видят вам будут благодарны.
Не мельчите со шрифтом. Все у кого глазки плохо видят вам будут благодарны.
0
Оно же, только немного более в общем виде:
dev.androidteam.ru/snippets/dialog/items-with-images-in-dialog
dev.androidteam.ru/snippets/dialog/items-with-images-in-dialog
0
Sign up to leave a comment.
Диалоговое окно Android с «иконифицированным» меню