Страница 1 из 11

Урок 125. ViewPager

Добавлено: 07 апр 2013, 23:00
damager82
В этом уроке:
- разбираемся с ViewPager


Click here to read this article!

Re: Урок 125. ViewPager

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

Re: Урок 125. ViewPager

Добавлено: 15 апр 2013, 21:05
rezak90
Интересен был бы урок связанный с динамической заменой fragment-ов в viewpager
динамически можно только далеко идущие, так как левый и правый находятся в памяти и "подменить" их не получится

Re: Урок 125. ViewPager

Добавлено: 15 апр 2013, 21:12
Ivan Zamurenko
Добрый вечер. Я немного не понимаю...

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

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

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

Re: Урок 125. ViewPager

Добавлено: 15 апр 2013, 21:52
rezak90
всё дело в неправильной архитектуре, как можно нажимать на то чего нету? в один момент доступно только одно активити, остальных просто нет.

Re: Урок 125. ViewPager

Добавлено: 15 апр 2013, 22:29
Ivan Zamurenko
Понимаете, у меня есть 3 активити:

Radisson_registration;
Radisson_registration_step_1;
Radisson_registration_step_2;

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

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

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

Re: Урок 125. ViewPager

Добавлено: 15 апр 2013, 22:54
rezak90
так надо было начинать с того что у Вас не активити, а View, если View то у вас же есть ссылка на каждый, вот и обращайтесь к методам/полям из каждой view. А вообще правильней работать ViewPager с фрагментами.

Re: Урок 125. ViewPager

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

Re: Урок 125. ViewPager

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

Re: Урок 125. ViewPager

Добавлено: 16 апр 2013, 17:32
KamiSempai
Я бы посоветовал Вам уменьшить количество фрагментов до 3.
После перелистывании всегда возвращать фокус на среднюю страницу и менять содержимое фрагментов так, как будто страница пролисталась.
Получится что-то вроде бесконечной прокрутки. Только еще нужно будет позаботиться о правильном перелистывании на первую и последнюю страницу.

Re: Урок 125. ViewPager

Добавлено: 16 апр 2013, 21:26
rezak90
KamiSempai, всё правильно заметил, только добавлю что хранить не фрагменты а что то иное, при перелистывании делать новый фрагмент в стек справа/лева и передавать ему номер страницы

Re: Урок 125. ViewPager

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

Re: Урок 125. ViewPager

Добавлено: 17 апр 2013, 21:20
neoksi
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()...

Re: Урок 125. ViewPager

Добавлено: 17 апр 2013, 22:35
Digetix
Спасибо за урок. А как настроить содержимое страниц? У меня их будет 3. На каждой странице будет разное содержимое.

Re: Урок 125. ViewPager

Добавлено: 17 апр 2013, 22:39
rezak90
народ, не ленитесь, смотрите в первую очередь офф доки, там и примере есть и ответы на все вопросы http://developer.android.com/reference/ ... Pager.html

Re: Урок 125. ViewPager

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

Re: Урок 125. ViewPager

Добавлено: 17 апр 2013, 22:51
rezak90
а дописать самому, не?

Re: Урок 125. ViewPager

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

Re: Урок 125. ViewPager

Добавлено: 17 апр 2013, 23:00
neoksi
Лично у меня вопрос в не дописать, а в оптимизации перерисовки, чтоб увеличить плавность и скорость отображения.

Re: Урок 125. ViewPager

Добавлено: 17 апр 2013, 23:06
rezak90
neoksi писал(а):Лично у меня вопрос в не дописать, а в оптимизации перерисовки, чтоб увеличить плавность и скорость отображения.
почему бы тогда не сделать не три а четыре страницы что бы та что справа не перерисовывалась? второй вариант если уж хочется три - на момент скролла повесить прогресс бар который будет закрываться после того когда всё отрисуется