Pull to refresh

Comments 38

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

Учту, обязательно, Ваши пожелания
посоветуйте, плиз, книгу по яве.
я искал на озоне: по адроиду там старые книги, а по яве — сами знаете какой зоопарк, не знаю что выбрать.
по 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;
	}
}
особенно посмотри по 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. Хотелось бы обратиться с просьбой писать побольше статей таких как эта и эта, т.к. очень мало статей на русском для начинающих. Заранее спасибо!
Only those users with full accounts are able to leave comments. Log in, please.