Урок 125. ViewPager
Re: Урок 125. ViewPager
Здравствуйте!
Я хотел бы сделать так чтобы было 5 страниц на каждой странице были кнопки. Помогите пожалуйста а то я полный нуб в этом.
Я хотел бы сделать так чтобы было 5 страниц на каждой странице были кнопки. Помогите пожалуйста а то я полный нуб в этом.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 125. ViewPager
Без проблем. Что не получается?
Re: Урок 125. ViewPager
Как сделать вообще определенное количество страниц не как здесь 10 а другое число. И где добавлять на каждую страницу что-то?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 125. ViewPager
[syntax=java5]
private class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(android.support.v4.app.Fragment fragment) {
super(fragment.getChildFragmentManager());
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
firstFragment = new FirstFragment();
return firstFragment;
case 1:
secondFragment = new SecondFragment();
return secondFragment;
case 2:
thirdFragment = new ThirdFragment();
return thirdFragment;
}
return null;
}
@Override
public int getCount() {
return 3;
}
}
[/syntax]
Ну как-то так. В адаптер передается android.support.v4.app.Fragment, потому что в моём примере, я использую ViewPager как фрагмент, поэтому получается фрагменты во фрагменте. Если у вас ВьюПейджер является активностью, то передавайте также, как и в примере с уроком.
В моём примере создается три фрагмента. Делайте по аналогии сколько угодно.
private class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(android.support.v4.app.Fragment fragment) {
super(fragment.getChildFragmentManager());
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
firstFragment = new FirstFragment();
return firstFragment;
case 1:
secondFragment = new SecondFragment();
return secondFragment;
case 2:
thirdFragment = new ThirdFragment();
return thirdFragment;
}
return null;
}
@Override
public int getCount() {
return 3;
}
}
[/syntax]
Ну как-то так. В адаптер передается android.support.v4.app.Fragment, потому что в моём примере, я использую ViewPager как фрагмент, поэтому получается фрагменты во фрагменте. Если у вас ВьюПейджер является активностью, то передавайте также, как и в примере с уроком.
В моём примере создается три фрагмента. Делайте по аналогии сколько угодно.
Re: Урок 125. ViewPager
Спасибо, буду разбираться!
Re: Урок 125. ViewPager
Здравствуйте, у меня вопрос?
У меня есть ViewPager, я сделал для него закольцованую пркрутку, тоисть значения поствил 3000 елементов и первая страница 1500, и у меня есть 3 фрагмента, между ними и должен происходить свайп, но у меня проблема, если быстро делать свайп то анимация жутко лагает.
Вот я думаю, где искать косяки? В ViewPager'е или нужно оптимизировать фрагменты?
(на фрагментах есть списки, много кастомных кнопок, и tabhost, а ещё первый фрагмент запускает на себе еще несколькоё)?
У меня есть ViewPager, я сделал для него закольцованую пркрутку, тоисть значения поствил 3000 елементов и первая страница 1500, и у меня есть 3 фрагмента, между ними и должен происходить свайп, но у меня проблема, если быстро делать свайп то анимация жутко лагает.
Вот я думаю, где искать косяки? В ViewPager'е или нужно оптимизировать фрагменты?
(на фрагментах есть списки, много кастомных кнопок, и tabhost, а ещё первый фрагмент запускает на себе еще несколькоё)?
Re: Урок 125. ViewPager
а кто нибудь разобрался как обновить ViewPager?
Я поступил очень некрасиво, просто убил Activity и заново создал, указав позицию фокуса для пейджера.
Буду ждать тут правильного и красивого решения .
Я поступил очень некрасиво, просто убил Activity и заново создал, указав позицию фокуса для пейджера.
Буду ждать тут правильного и красивого решения .
Re: Урок 125. ViewPager
тоже интересно, но пока просто перегружаю адаптер для viewpager'a....
Re: Урок 125. ViewPager
Всем Добрый День!
Исправил пост если кто читал я нашел ошибку вернее поставил костыль. Смысл такой нужно было связать данные Cursor с ViewPager.
Попробовал данные курсора получить из метода onCreate(Bundle savedInstanceState) .
Все работало но после смены ориентации все данные на прилагающих и текучей странице становились одинаковые. Пришлось брать данные из метода onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
Все работает нормально но чувствую что это "костыль".
Исправил пост если кто читал я нашел ошибку вернее поставил костыль. Смысл такой нужно было связать данные Cursor с ViewPager.
Попробовал данные курсора получить из метода onCreate(Bundle savedInstanceState) .
Все работало но после смены ориентации все данные на прилагающих и текучей странице становились одинаковые. Пришлось брать данные из метода onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
Все работает нормально но чувствую что это "костыль".
Код: Выделить всё
public class PageFragment extends Fragment {
static final String ARGUMENT_PAGE_NUMBER = "arg_page_number";
int pageNumber;
int backColor;
Cursor cursor;
String txt;
static PageFragment newInstance(int page) {
PageFragment pageFragment = new PageFragment();
Bundle arguments = new Bundle();
arguments.putInt(ARGUMENT_PAGE_NUMBER, page);
pageFragment.setArguments(arguments);
return pageFragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pageNumber = getArguments().getInt(ARGUMENT_PAGE_NUMBER);
Random rnd = new Random();
backColor = Color.argb(40, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
cursor = MainActivity.cursor;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, null);
TextView tvPage = (TextView) view.findViewById(R.id.tvPage);
getTxt(pageNumber);
tvPage.setText("Count "+ txt);
tvPage.setBackgroundColor(backColor);
return view;
}
// костыль
public String getTxt(int pageNumber) {
cursor.moveToPosition(pageNumber);
txt = cursor.getString(cursor.getColumnIndex("txt"));
return "";
}
}
Покажите примерчик как?no-- писал(а):1. А что вам мешает передавать НЕ ТОЛЬКО номер страницы? Номер же как-то передаётся. Он передаётся через Bundle в уроке. Через этот же Bundle можно передавать сами объекты, например как putParcelable или putSerializable. Можете глянуть какие есть методы в самом Bundle для передачи данных через него.вот и я хочу так сделать. но во фрагмент передается только номер страницы
2. Но если всё же хочется через методы заполнять... Делаем так. В методе onCreateView бросаем Broadcast (getActivity.sendBroadcast(...)), в который можно передать сам номер созданного фрагмента (я так понимаю это у вас номер дня как раз). В активности в самой мы ловим этот бродкаст, дальше достаем номер фрагмента, идём во ViewPager, достаём нужный фрагмент и заполняем его.
Re: Урок 125. ViewPager
Подскажите пожалуйста. Просмотрев данный урок решил сделать вот такую задачу:
Есть активити1 - это главная активность. В ней находится еще 3 лэйаута. Допустим в 3ем лэйауте я хочу отобразить мой прокручивающийся вью из этого урока. Подскажите пожалуйста как можно это реализовать.
Проблема на данный момент заключается в том, что главная активи наследуется от Activity, и нельзя прям из нее все делать. Нужно в лэйаут номер 3 ложить лэйаут из файла, который наследуется от FragmentActivity. И я уже запутался и не смог придумать как же из главного активити запустить второе активити, чтобы оно показывалось в первом и прокручивало свой лэйаут толкьо в лэйауте номер 3.
Сейчас пришла идея на счет того, чтобы через интент запустить вторую активность и добавить в лэйаут 3 лэйаут из второй активности.
Есть активити1 - это главная активность. В ней находится еще 3 лэйаута. Допустим в 3ем лэйауте я хочу отобразить мой прокручивающийся вью из этого урока. Подскажите пожалуйста как можно это реализовать.
Проблема на данный момент заключается в том, что главная активи наследуется от Activity, и нельзя прям из нее все делать. Нужно в лэйаут номер 3 ложить лэйаут из файла, который наследуется от FragmentActivity. И я уже запутался и не смог придумать как же из главного активити запустить второе активити, чтобы оно показывалось в первом и прокручивало свой лэйаут толкьо в лэйауте номер 3.
Сейчас пришла идея на счет того, чтобы через интент запустить вторую активность и добавить в лэйаут 3 лэйаут из второй активности.
Re: Урок 125. ViewPager
Не, все же подскажите кто знает как сделать так.
Re: Урок 125. ViewPager
Прикрепляю пример
- Вложения
-
- test_Fragment.rar
- проект.
- (1.18 МБ) 279 скачиваний
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 125. ViewPager
Создать фрагмент, в него вложить вьюпейджер. Дальше создать в главной активности контейнеты (к примеру FrameLayout), в которых и будут отображаться фрагменты. Во FrameLayout они к примеру заполняют всё пространство. Итого, можно сделать 3 контейнера в одной активности, куда и передавать фрагменты, которые заполнят эти самые контейнеры.
Re: Урок 125. ViewPager
Никак не могу определить размер элементов расположенных во фрагменте.
Расположил во фрагменте ImageView и никак не могу узнать его размер все время НОЛЬ
...
ImageView img = (ImageView) view.findViewById(R.id.img_icons_fragment_sobitie);
ivHeight = img.getHeight();
ivWidth = img.getWidth();
Log.d("tag", "W "+ ivWidth + " H " + ivHeight);
...
Даже если элементам жёстко указать размер все равно при получении через методы getHeight() getWidth() Возвращается ноль!
Как быть???
Расположил во фрагменте ImageView и никак не могу узнать его размер все время НОЛЬ
...
ImageView img = (ImageView) view.findViewById(R.id.img_icons_fragment_sobitie);
ivHeight = img.getHeight();
ivWidth = img.getWidth();
Log.d("tag", "W "+ ivWidth + " H " + ivHeight);
...
Даже если элементам жёстко указать размер все равно при получении через методы getHeight() getWidth() Возвращается ноль!
Как быть???
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 125. ViewPager
Понятия не имею, но вы не первый на "этом празднике".
http://stackoverflow.com/questions/4680 ... -imageview
http://stackoverflow.com/questions/1402 ... eight-zero
http://stackoverflow.com/questions/8170 ... ui-objects
Ну и запрос в гугл
https://www.google.ru/search?q=imagevie ... e&ie=UTF-8
http://stackoverflow.com/questions/4680 ... -imageview
http://stackoverflow.com/questions/1402 ... eight-zero
http://stackoverflow.com/questions/8170 ... ui-objects
Ну и запрос в гугл
https://www.google.ru/search?q=imagevie ... e&ie=UTF-8
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 125. ViewPager
Так у них же, в этом случае, еще даже Measure размеры не вычислились.snowkam писал(а):Никак не могу определить размер элементов расположенных во фрагменте.
Расположил во фрагменте ImageView и никак не могу узнать его размер все время НОЛЬ
...
ImageView img = (ImageView) view.findViewById(R.id.img_icons_fragment_sobitie);
ivHeight = img.getHeight();
ivWidth = img.getWidth();
Log.d("tag", "W "+ ivWidth + " H " + ivHeight);
...
Даже если элементам жёстко указать размер все равно при получении через методы getHeight() getWidth() Возвращается ноль!
Как быть???
Гуглите "android measure view".
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 125. ViewPager
Добрый день!
У меня несколько отвлеченный вопрос.
на данный момент у меня есть viewPager, в котором хранятся 3 фрагмента. Так же, активити, в которой определен viewPager является контроллером в моей MVC. Она определяет кучу интерфейсов, в том числе UI интерфейс, который используют все 3 фрагмента для связи с активити.
Вопрос такой - сейчас я проверяю какой из фрагментов прислал событие по тэгу активного фрагмента и выглядит все это как-то очень коряво. Нет ли какого нибудь примера как объеденить viewPager с парадигмой model-view-controller или может кто знает ссылку на ресурс, де можно подсмотреть или проверить на сколько хороша текущая архитектура?
PS, я понимаю, что здесь может не лучшее место для этого, но я не знаю где бы еще спросить. Спасибо большое.
У меня несколько отвлеченный вопрос.
на данный момент у меня есть viewPager, в котором хранятся 3 фрагмента. Так же, активити, в которой определен viewPager является контроллером в моей MVC. Она определяет кучу интерфейсов, в том числе UI интерфейс, который используют все 3 фрагмента для связи с активити.
Вопрос такой - сейчас я проверяю какой из фрагментов прислал событие по тэгу активного фрагмента и выглядит все это как-то очень коряво. Нет ли какого нибудь примера как объеденить viewPager с парадигмой model-view-controller или может кто знает ссылку на ресурс, де можно подсмотреть или проверить на сколько хороша текущая архитектура?
PS, я понимаю, что здесь может не лучшее место для этого, но я не знаю где бы еще спросить. Спасибо большое.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 125. ViewPager
Если вкратце, то у нас такая же схема используется, правда несколько усложненная. Также через слушатели общаемся с фрагментов к активности, которая уже принимает решения.
mCallback.todoSomeMethod(someInformation, Utils.FRAGMENT_ONE);
а вообще лично у нас к разным фрагментам, обычно разные методы, а там где общие, там не важно кто вызвал. Как-то так.
На счет MVC сильно не заморачивайтесь. Советую почитать код приложения Google IO, исходный код которых есть в инете. Очень грамотно сделали они его, впрочем оно и сделано, дабы показать как правильно и красиво писать код под андроид.
Я не совсем понял про какие Вы проблемы говорите. Делается слушатель, вызывается его метод и если и надо, то передается к примеру какой-то флаг того, кто вызвал метод. К примеруВопрос такой - сейчас я проверяю какой из фрагментов прислал событие по тэгу активного фрагмента и выглядит все это как-то очень коряво.
mCallback.todoSomeMethod(someInformation, Utils.FRAGMENT_ONE);
а вообще лично у нас к разным фрагментам, обычно разные методы, а там где общие, там не важно кто вызвал. Как-то так.
На счет MVC сильно не заморачивайтесь. Советую почитать код приложения Google IO, исходный код которых есть в инете. Очень грамотно сделали они его, впрочем оно и сделано, дабы показать как правильно и красиво писать код под андроид.
-
- Сообщения: 2
- Зарегистрирован: 13 ноя 2013, 18:28
Re: Урок 125. ViewPager
Подскажите пожалуйста.
Как в PageFragment.java вызвать ContextMenu для текущей страницы??
Как в PageFragment.java вызвать ContextMenu для текущей страницы??
Re: Урок 125. ViewPager
Добрый день!
Скажите, пожалуйста, как в ViewPager вставить ещё и OnClickListener, чтобы можно было после перелистывания страниц кликать на их содержимое, и, например, вызывать другое Activity?
Скажите, пожалуйста, как в ViewPager вставить ещё и OnClickListener, чтобы можно было после перелистывания страниц кликать на их содержимое, и, например, вызывать другое Activity?