Урок 125. ViewPager

Обсуждение уроков
gorod
Сообщения: 10
Зарегистрирован: 04 июн 2013, 11:34

Re: Урок 125. ViewPager

Сообщение gorod » 05 июн 2013, 18:00

Уважаемые форумчане!

Обращаюсь к вам за помощью повторно.
Вопрос был такой:
Есть несколько фрагментов: fragment1.xml, fragment2.xml ..., fragment15.xml.
Как сделать так, чтобы перелистывание страниц осуществлялось программно и через заданный интервал времени, и при этом на страницу 1 подставлялось содержимое фрагмента 1, на страницу 2 - фрагмента 2 и т.д.
Мне ответили, что нужно использовать пример, расположенный здесь:
http://developer.android.com/reference/ ... tItem(int)
Я попробовал использовать пример по указанной ссылке.
В папке layout создал 2 файла fragment_pager_list.xml и fragment_pager.xml, в папке src создал новый класс FragmentPagerSupport.java
Но ничего не получается и не работает.
Не могли бы Вы мне помочь и на конкретном примере показать как можно сделать так, чтобы перелистывание страниц осуществлялось программно и через заданный интервал времени, и при этом на страницу 1 подставлялось содержимое фрагмента 1, на страницу 2 - фрагмента 2 и т.д.

Большое спасибо! Благодарю каждого, кто сможет откликнуться.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 125. ViewPager

Сообщение Foenix » 05 июн 2013, 18:04

никто вам готовый код тут не запостит, можно не надеяться. Возможно, кто-то согласится помочь за плату ;)
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

gorod
Сообщения: 10
Зарегистрирован: 04 июн 2013, 11:34

Re: Урок 125. ViewPager

Сообщение gorod » 05 июн 2013, 18:44

Я готов оплатить помощь по своему вопросу.

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 125. ViewPager

Сообщение igrok-vip » 09 июн 2013, 21:35

Подскажите, должен же быть какой-нибудь способ пересоздать расположенную слева или справа страницу? Или может как-то можно пересоздать все страницы сразу? Или как добраться до фрагмента ViewPager'а из Activity?

assan
Сообщения: 48
Зарегистрирован: 24 мар 2013, 22:31

Re: Урок 125. ViewPager

Сообщение assan » 10 июн 2013, 12:04

Присоединяюсь к предыдущему посту
и вопрос
как передать дополнительные параметры в PageFragment из Activity, при создании ViewPager?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 125. ViewPager

Сообщение klblk » 10 июн 2013, 12:36

берёте из адаптера фрагмент и делаете с ним что угодно, наверное)

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 125. ViewPager

Сообщение igrok-vip » 10 июн 2013, 12:47

Нашёл кое-что:
View v = (View) pager.getChildAt(0);
Далее через v.findViewById(R.id....) находим нужную вьюшку и делаем с ней что хотим.
Потом вызываем
v.invalidate();
v.requestLayout();
Но почему-то getChildAt(0) упорно возвращает не нулевую страницу, а первую. А с моим -1 шлёт куда подальше)) В чём причина?

assan тебе наверное нужно в PageFragment в onCreateView в зависимости от Page_number брать данные из Activity через MainActivity.переменная. Только эта переменная должна быть static. Не уверен, что это правильный способ, но у меня так работает

assan
Сообщения: 48
Зарегистрирован: 24 мар 2013, 22:31

Re: Урок 125. ViewPager

Сообщение assan » 10 июн 2013, 12:48

klblk писал(а):берёте из адаптера фрагмент и делаете с ним что угодно, наверное)
на каком этапе? когда создаются фрагменты?

assan
Сообщения: 48
Зарегистрирован: 24 мар 2013, 22:31

Re: Урок 125. ViewPager

Сообщение assan » 10 июн 2013, 13:13

igrok-vip писал(а): assan тебе наверное нужно в PageFragment в onCreateView в зависимости от Page_number брать данные из Activity через MainActivity.переменная. Только эта переменная должна быть static. Не уверен, что это правильный способ, но у меня так работает
да так работает, если не нравится - можно и через геттер обращаться, но он тоже должен быть static.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 125. ViewPager

Сообщение klblk » 10 июн 2013, 15:29

assan писал(а):
klblk писал(а):берёте из адаптера фрагмент и делаете с ним что угодно, наверное)
на каком этапе? когда создаются фрагменты?
у самого нет сейчас возможности проверить, как-то так:
((PageFragment) adapter.getItem(position)).update();

где position номер страницы, а update() метод PageFragment в котором мы его обновляем

johnnyy78
Сообщения: 1
Зарегистрирован: 14 мар 2013, 10:14

Re: Урок 125. ViewPager

Сообщение johnnyy78 » 12 июн 2013, 13:34

gorod писал(а):Уважаемые форумчане!

Обращаюсь к вам за помощью повторно.
Вопрос был такой:
Есть несколько фрагментов: fragment1.xml, fragment2.xml ..., fragment15.xml.
Как сделать так, чтобы перелистывание страниц осуществлялось программно и через заданный интервал времени, и при этом на страницу 1 подставлялось содержимое фрагмента 1, на страницу 2 - фрагмента 2 и т.д.
...

Из этой части кода думаю все будет понятно

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view;

if(pageNumber == 0)
view = inflater.inflate(R.layout.fragment0, null);
else if(pageNumber == 1)
view = inflater.inflate(R.layout.fragment1, null);
else if(pageNumber == 2)
view = inflater.inflate(R.layout.fragment2, null);
else
view = inflater.inflate(R.layout.fragment, null);

TextView tvPage = (TextView) view.findViewById(R.id.tvPage);
tvPage.setText("Page " + pageNumber);
tvPage.setBackgroundColor(backColor);

***

gorod
Сообщения: 10
Зарегистрирован: 04 июн 2013, 11:34

Re: Урок 125. ViewPager

Сообщение gorod » 14 июн 2013, 13:39

Уважаемые форумчане!
Подскажите, пожалуйста, как сделать так, чтобы перелистывание страниц (фрагментов: fragment1.xml, fragment2.xml ..., fragmentN.xml) осуществлялось программно и через заданный интервал времени. В уроке 125 написано: "Чтобы программно перелистнуть страницу ViewPager используйте метод setCurrentItem".

В MainActivity.java в код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

pager = (ViewPager) findViewById(R.id.pager);
pagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
pager.setAdapter(pagerAdapter);

я вставил следующее: pager.setCurrentItem(1);
Однако при запуске проекта открывается страница 1, и соответственно если указать pager.setCurrentItem(2), то при запуске откроется страница 2.

А как все-таки сделать так, чтобы перелистывание осуществлялось программно и через заданный интервал времени?
Спасибо!

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 125. ViewPager

Сообщение klblk » 14 июн 2013, 14:50

можно думаю с помощью timer+handler

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 125. ViewPager

Сообщение igrok-vip » 14 июн 2013, 16:19

Подскажите пожалуйста кто-нибудь. Сделал почти всё что хотел с viewpager'ом, осталось только сделать возможность удалять страницы, но не выходит.
У меня как в уроке есть переменная PAGE_COUNT, увеличив её добивался увеличения пролистываемых страниц, а с уменьшением так не выходит. Видимо последняя страница висит где-то в памяти. При попытке пролистать до неё её видно, но viewpager пружинит обратно на существующую. Как убрать ту последнюю удалённую, чтобы нельзя было её вообще увидеть?

gorod
Сообщения: 10
Зарегистрирован: 04 июн 2013, 11:34

Re: Урок 125. ViewPager

Сообщение gorod » 15 июн 2013, 13:49

igrok-vip писал(а):осталось только сделать возможность удалять страницы, но не выходит. Как убрать ту последнюю удалённую, чтобы нельзя было её вообще увидеть?
Если не ошибаюсь, то добавление и удаление экранов или страниц реализуется с помощью методов instantiateItem() и destroyItem() соответственно.

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 125. ViewPager

Сообщение igrok-vip » 15 июн 2013, 14:46

Ага, есть такие, но не пойму что ему нужно передать в качестве параметров.
Допустим у меня 2 страницы и я пытаюсь удалить нулевую находясь на ней.
Пытаюсь сделать так:
[syntax=java]
int pos = pager.getCurrentItem();
pager.setCurrentItem(pos+1);
pagerAdapter.destroyItem(pager, pos, null);
[/syntax]
Первый параметр ViewGroup container похоже это мой ViewPager - pager
Второй порядковый номер удаляемой страницы pos
А вот что за третий Object object не пойму.
В таком виде как сейчас при попытке удалить ошибка

gorod
Сообщения: 10
Зарегистрирован: 04 июн 2013, 11:34

Re: Урок 125. ViewPager

Сообщение gorod » 15 июн 2013, 15:09

Если находишься на нулевой странице, то pos+1 скорее всего удалит только следующую.
А может быть попробовать так:
[syntax=java]
pager.setCurrentItem(pos-1);
[/syntax]

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 125. ViewPager

Сообщение igrok-vip » 15 июн 2013, 15:58

Не, не в этом дело. Если допустим удалить первую страницу находясь на нулевой, то ошибка сразу не появляется, а только при пролистывании на эту страницу. Получается страница как бы удалена, но "viewpager об этом не знает" или типо того.
И главное ошибка даже если чуть-чуть потянуть и отпустить назад на нулевую)

gorod
Сообщения: 10
Зарегистрирован: 04 июн 2013, 11:34

Re: Урок 125. ViewPager

Сообщение gorod » 15 июн 2013, 16:13

Может быть попробовать в адаптере прописать примерно так:

[syntax=java]
public class SamplePagerAdapter extends PagerAdapter{

ViewPager pages = null;

public SamplePagerAdapter(ViewPager pages){
this.pages = pages;
}

@Override
public Object instantiateItem(View collection, int position){
View v = pages.get(position);
((ViewPager) collection).addView(v, 0);
return v;
}

@Override
public void destroyItem(View collection, int position, Object view){
((ViewPager) collection).removeView((View) view);
}

@Override
public int getCount(){
return pages.size();
}
[/syntax]

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 125. ViewPager

Сообщение igrok-vip » 15 июн 2013, 17:16

Спасибо конечно. Но я делал по уроку и у меня адаптер совсем другой:
[syntax=java]
private class MyFragmentPagerAdapter extends FragmentPagerAdapter {

public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}

@Override
public Fragment getItem(int position) {
return PageFragment.newInstance(position);
}


@Override
public int getCount() {
return PAGE_COUNT;
}

}
[/syntax]

И что делать с этим адапретор не представляю)

Ответить