Урок 125. ViewPager

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 125. ViewPager

Сообщение damager82 » 07 апр 2013, 23:00

В этом уроке:
- разбираемся с ViewPager


Click here to read this article!
Последний раз редактировалось damager82 26 май 2017, 13:42, всего редактировалось 3 раза.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

evansgelist
Сообщения: 1
Зарегистрирован: 15 апр 2013, 15:59

Re: Урок 125. ViewPager

Сообщение evansgelist » 15 апр 2013, 16:26

Спасибо за урок
Интересен был бы урок связанный с динамической заменой fragment-ов в viewpager
и как обрабатывать поворот экрана с viewpager (востановление всех фрагментов в viewpager со всеми данными)

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 125. ViewPager

Сообщение rezak90 » 15 апр 2013, 21:05

Интересен был бы урок связанный с динамической заменой fragment-ов в viewpager
динамически можно только далеко идущие, так как левый и правый находятся в памяти и "подменить" их не получится
R.id.team
Политика на форуме запрещена

Ivan Zamurenko
Сообщения: 14
Зарегистрирован: 18 ноя 2012, 23:55

Re: Урок 125. ViewPager

Сообщение Ivan Zamurenko » 15 апр 2013, 21:12

Добрый вечер. Я немного не понимаю...

Не понимаю я вот чего, как мне можно сделать прослушку допустим, кнопок с другого активити??
Я просто ложу в массив шаблон(*xml) файл и листаю их, но само активити я ен создаю, по этому кнопки с других активити оно не видет.

Можете подсказать, как можно обойти эту проблему?

Мне нужно с Активити3, нажать на кнопку и получить свой выпадающий список допустим, а на Активити2 если нажать, то произойдут какие-либо другие действия.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 125. ViewPager

Сообщение rezak90 » 15 апр 2013, 21:52

всё дело в неправильной архитектуре, как можно нажимать на то чего нету? в один момент доступно только одно активити, остальных просто нет.
R.id.team
Политика на форуме запрещена

Ivan Zamurenko
Сообщения: 14
Зарегистрирован: 18 ноя 2012, 23:55

Re: Урок 125. ViewPager

Сообщение Ivan Zamurenko » 15 апр 2013, 22:29

Понимаете, у меня есть 3 активити:

Radisson_registration;
Radisson_registration_step_1;
Radisson_registration_step_2;

И разумеется на них все есть кнопки.
Я хотел через ViewPager, работать сразу с тремя, но когда писал код, увидел, что мы работает не с активити, а со слоями(*хмл - файлы). Вот и ломал голову, как сделать так, чтобы кнопка, находящаяся на третем активити, обрабатывалась в первом.

Просто нужно было написать ее метод(у меня это regMe(View v)).

Я думаю будет не удобно все в 1-ом активити хранить...Сильно много будет забито кодом, но это кажется единственный выход.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 125. ViewPager

Сообщение rezak90 » 15 апр 2013, 22:54

так надо было начинать с того что у Вас не активити, а View, если View то у вас же есть ссылка на каждый, вот и обращайтесь к методам/полям из каждой view. А вообще правильней работать ViewPager с фрагментами.
R.id.team
Политика на форуме запрещена

Ivan Zamurenko
Сообщения: 14
Зарегистрирован: 18 ноя 2012, 23:55

Re: Урок 125. ViewPager

Сообщение Ivan Zamurenko » 16 апр 2013, 09:59

Я пробовал работать с фрагментами, где-то что-то не получается. Но, ничего страшного. Буду идти к этому! =)

bloodvlad
Сообщения: 2
Зарегистрирован: 16 апр 2013, 17:00

Re: Урок 125. ViewPager

Сообщение bloodvlad » 16 апр 2013, 17:20

Здравствуйте.
Я реализую перелистывание страниц книги через ViewPager.
Сейчас у меня реализация такая: в ViewPager находится 5 страниц-фрагментов, которые я перелистываю, и динамически подгружаю информацию в последние страницы, которые сейчас не видны.
Не стоит ли мне переделать ViewPager под большое кол-во фрагментов, т.е. кол-во фрагментов чтобы равнялось кол-ву моих страниц книги, количество которых может достигать 1500?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 125. ViewPager

Сообщение KamiSempai » 16 апр 2013, 17:32

Я бы посоветовал Вам уменьшить количество фрагментов до 3.
После перелистывании всегда возвращать фокус на среднюю страницу и менять содержимое фрагментов так, как будто страница пролисталась.
Получится что-то вроде бесконечной прокрутки. Только еще нужно будет позаботиться о правильном перелистывании на первую и последнюю страницу.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 125. ViewPager

Сообщение rezak90 » 16 апр 2013, 21:26

KamiSempai, всё правильно заметил, только добавлю что хранить не фрагменты а что то иное, при перелистывании делать новый фрагмент в стек справа/лева и передавать ему номер страницы
R.id.team
Политика на форуме запрещена

bloodvlad
Сообщения: 2
Зарегистрирован: 16 апр 2013, 17:00

Re: Урок 125. ViewPager

Сообщение bloodvlad » 17 апр 2013, 10:07

У меня 5 фрагментов, чтобы создать "бесконечную" прокрутку, т.к. нашел только одно решение, использовать фрагменты: C' A B C A'. Конечно дублирование фрагментов меня смущает, но другого решения найти пока не смог.
А если сделать так: "После перелистывании всегда возвращать фокус на среднюю страницу и менять содержимое фрагментов так, как будто страница пролисталась.", то мне кажется не будет успевать обновляться контент на страницах, и будет мигание.
rezak90 писал(а):KamiSempai, всё правильно заметил, только добавлю что хранить не фрагменты а что то иное, при перелистывании делать новый фрагмент в стек справа/лева и передавать ему номер страницы
А вот с этим моментом не понял, можно, пожалуйста, поподробнее?

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 125. ViewPager

Сообщение neoksi » 17 апр 2013, 21:20

KamiSempai писал(а):Я бы посоветовал Вам уменьшить количество фрагментов до 3.
После перелистывании всегда возвращать фокус на среднюю страницу и менять содержимое фрагментов так, как будто страница пролисталась.
Получится что-то вроде бесконечной прокрутки. Только еще нужно будет позаботиться о правильном перелистывании на первую и последнюю страницу.
Я в свое время делал именно так и самая жесть было заставить нормально перерисовываться страницы. Рабочее решение тогда нашел:
[syntax=java]cTitleIndicator.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {

if (focusedPage == 0) {
new Handler().post(new Runnable() {
@Override
public void run() {
for(int i=0;i<3;i++){
cArray.prevMonth();
elCalendarViewMaker.makeGrid(ctx, mDialog, mOnResultListener, views, cArray);
if(i==currentSelView){
cTitleIndicator.setCurrentItem(currentSelView, false);
}
}
}
});
} else if (focusedPage == 2) {
new Handler().post(new Runnable() {
@Override
public void run() {
for(int i=0;i<3;i++){
cArray.nextMonth();
elCalendarViewMaker.makeGrid(ctx, mDialog, mOnResultListener, views, cArray);
if(i==currentSelView){
cTitleIndicator.setCurrentItem(currentSelView, false);
}
}
}
});
}
}
}

@Override
public void onPageSelected(int position) {
focusedPage = position;
}

});[/syntax]
Но если честно, я был бы рад, если бы мне подсказали, как можно ускорить перерисовку не используюя new Handler().post(new Runnable()...

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 125. ViewPager

Сообщение Digetix » 17 апр 2013, 22:35

Спасибо за урок. А как настроить содержимое страниц? У меня их будет 3. На каждой странице будет разное содержимое.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 125. ViewPager

Сообщение rezak90 » 17 апр 2013, 22:39

народ, не ленитесь, смотрите в первую очередь офф доки, там и примере есть и ответы на все вопросы http://developer.android.com/reference/ ... Pager.html
R.id.team
Политика на форуме запрещена

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 125. ViewPager

Сообщение neoksi » 17 апр 2013, 22:46

rezak90 писал(а):народ, не ленитесь, смотрите в первую очередь офф доки, там и примере есть и ответы на все вопросы http://developer.android.com/reference/ ... Pager.html
Может у меня глаз замылился, но где ты там в примере увидел реализацию UI паттерна "Карусель"?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 125. ViewPager

Сообщение rezak90 » 17 апр 2013, 22:51

а дописать самому, не?
R.id.team
Политика на форуме запрещена

Digetix
Сообщения: 117
Зарегистрирован: 12 окт 2012, 15:31

Re: Урок 125. ViewPager

Сообщение Digetix » 17 апр 2013, 22:56

У меня эта страница открыта. Пробую вот так
[syntax=java]
pager = (ViewPager) findViewById(R.id.pager);
pagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
pager.addView(getLayoutInflater().inflate(R.layout.two, null));
pager.setAdapter(pagerAdapter);
[/syntax]никаких изменений

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 125. ViewPager

Сообщение neoksi » 17 апр 2013, 23:00

Лично у меня вопрос в не дописать, а в оптимизации перерисовки, чтоб увеличить плавность и скорость отображения.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 125. ViewPager

Сообщение rezak90 » 17 апр 2013, 23:06

neoksi писал(а):Лично у меня вопрос в не дописать, а в оптимизации перерисовки, чтоб увеличить плавность и скорость отображения.
почему бы тогда не сделать не три а четыре страницы что бы та что справа не перерисовывалась? второй вариант если уж хочется три - на момент скролла повесить прогресс бар который будет закрываться после того когда всё отрисуется
R.id.team
Политика на форуме запрещена

Ответить