Как стать автором
Обновить

Комментарии 38

НЛО прилетело и опубликовало эту надпись здесь
Спасибо за статью! побольше бы статей по разработке
Пожалуйста! Действительно, статей по разработке под Андроид маловато.
Спасибо за то что поделились опытом! Очень полезно.
Перенесите, пожалуйста, в Android.
Хорошо
  • 1. Размеры нужно писать в dip, иначе ваш пример будет по разному выглядеть на различных устройствах.
  • 2. Вариант подходит только для небольшого количество пунктов, которые не будут прокручиваться, т.к. View row = inflater.inflate(R.layout.select_account_item, parent, false); довольно затратная операция. А также в методе getView не переиспользуются view, и они каждый раз создаются заново.
1. Согласен
2. Согласен

Учту, обязательно, Ваши пожелания
посоветуйте, плиз, книгу по яве.
я искал на озоне: по адроиду там старые книги, а по яве — сами знаете какой зоопарк, не знаю что выбрать.
Философия Java Брюса Эккеля
по Android сейчас на русском книга вышла, вполне неплохая, но для новичков
я на английском спокойно читаю, так что предлагаю расширить список.
ну тогда pro android 2, professional android 2 development — две лучшие книги, сам я читал только первую, но первое издание. мне очень понравилось. читается просто и понятно
У тебя адаптер с твоем случае медленно работает. Самое быстрое сделать так:

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;
	}
}
Ух ты, интересно
посмотри презентации с последнего 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 17 слайд, там разница производительности твоего метода и моего ))
Спасибо за совет. Переписал адаптер — реально намного быстрее открывается теперь диалог
ну разница сильно заметна обычно если много в списке элементов, неужели на таком малом количестве тоже быстрей?
субъективно и в эмуляторе: при первом открытии диалога скорость открытия такая же, при последующих — заметно на глаз, что немного быстрее
Может кто-нибудь знает где можно скачать все(или несколько) эти видео разом и желательно на большой скорости?
Извиняюсь за не слишком интеллектуальный вопрос, но я хотел бы прояснить для себя принцип работы данного адаптера, т.к. я тоже изучаю Андроида.

При скроллинге списка, в отображаемую область попадают новые элементы списка, для каждого заново отображаемого элемента вызывается метод getView, который должен возвращать представление (View) для данного элемента. Если элемент уже был на экране, то в метод передается существующий View. Т.к. inflate требует значительных затрат, то лучше его не вызывать, если есть этот существующий View. Дочерние View'ы тоже сохраняются, и их так же лучше не пересоздавать, но то, что в layout-е непосредственно не описано, не сохраняется, поэтому изображение и текст придется переприсваивать заново.

Все я верно понял или что-то упустил?
не обязательно вид от данного элемента, вообще ранее созданный и не используемый более вид. Быстро прокручиваете вниз — в этот метод будут приходить виды, скрывшиеся вверху.
По android sdk мне вполне хватает двух книг:

+ официальная документация официального сайта + google-группа по андроиду.
А по Java я бы посоветовал Thinking in Java (Философия Java) Брюса Эккеля

P.S. Кстати, я бы не сказал, что указанные выше книги по андроиду устаревшие. 2-я версия платформы какникак описывается
спасибо за книжки
Сам новичок в Android, поэтому не буду давать советов, а выскажу лишь несколько наблюдений и мыслей вслух)

1. AccountsTypesListAdapter можно было наследовать сразу от BaseAdapter. В приложении с несколькими подобными меню было бы удобней.
2. Может быть, есть смысл создавать вьюшник элемента списка не из xml, а в рантайме? Это быстрее и надёжнее.
3. Данный адаптер можно использовать не только в AlertDialog, но и в любом одноуровневом ListView.

З.Ы. Автор — молодец.
1. А разница?
2. Так в дальнейшем проще стилизовать и реюзать вид. А чем быстрее и надёжнее?
1. Разница в . Мне кажется лучше оставить здесь пространство для использования разного контента, написать более общий адаптер. Впрочем, это придирки.
2. Про стилизовать и реюзать — согласен. Но, во-первых, Inflator чертовски долго работает, как уже было сказано выше, а во-вторых, xml — потенциальный источник багов.
1. Альтернатива — только курсор-адаптер, а там это делалось бы через SimpleCursorAdapter.ViewBinder.
2. Скорость — да, в таком простом случае было бы не сложнее создать кодом и выиграть в скорости, а баги какие возможны?
1. Т.е.? Вы о чём? Адаптер можно написать любой. Я за более общий.
2. Не надо забывать, что xml — отдельный файл. С ним может произойти всё, что угодно от повреждения до подмены содержания. Плюс при использовании собственных вьюшников в xml могут повылезать проблемы с загрузкой классов. Гляньте в исходники Inflator и посмотрите, откуда у него exception'ы «растут».
Общее пожелание:
Не мельчите со шрифтом. Все у кого глазки плохо видят вам будут благодарны.
со шрифтом исходников?
я думаю со шрифтом вот тут

Верно вам сказали.
В вашем замечательном диалоговом окне.
Интересно, спасибо! Судя по комментариям, на Хбаре очень много людей серьезно занимающихся разработкой под Android. Хотелось бы обратиться с просьбой писать побольше статей таких как эта и эта, т.к. очень мало статей на русском для начинающих. Заранее спасибо!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации