Урок 125. ViewPager

Обсуждение уроков
starshas
Сообщения: 57
Зарегистрирован: 22 сен 2013, 17:38

Re: Урок 125. ViewPager

Сообщение starshas » 22 сен 2013, 18:18

Здравствуйте!
Я хотел бы сделать так чтобы было 5 страниц на каждой странице были кнопки. Помогите пожалуйста а то я полный нуб в этом.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 125. ViewPager

Сообщение Mikhail_dev » 23 сен 2013, 11:24

Без проблем. Что не получается?

starshas
Сообщения: 57
Зарегистрирован: 22 сен 2013, 17:38

Re: Урок 125. ViewPager

Сообщение starshas » 23 сен 2013, 19:54

Как сделать вообще определенное количество страниц не как здесь 10 а другое число. И где добавлять на каждую страницу что-то?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 125. ViewPager

Сообщение Mikhail_dev » 23 сен 2013, 20:53

[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 как фрагмент, поэтому получается фрагменты во фрагменте. Если у вас ВьюПейджер является активностью, то передавайте также, как и в примере с уроком.
В моём примере создается три фрагмента. Делайте по аналогии сколько угодно.

starshas
Сообщения: 57
Зарегистрирован: 22 сен 2013, 17:38

Re: Урок 125. ViewPager

Сообщение starshas » 23 сен 2013, 21:30

Спасибо, буду разбираться!

ocean911
Сообщения: 5
Зарегистрирован: 09 май 2013, 10:27

Re: Урок 125. ViewPager

Сообщение ocean911 » 24 сен 2013, 16:56

Здравствуйте, у меня вопрос?
У меня есть ViewPager, я сделал для него закольцованую пркрутку, тоисть значения поствил 3000 елементов и первая страница 1500, и у меня есть 3 фрагмента, между ними и должен происходить свайп, но у меня проблема, если быстро делать свайп то анимация жутко лагает.
Вот я думаю, где искать косяки? В ViewPager'е или нужно оптимизировать фрагменты?
(на фрагментах есть списки, много кастомных кнопок, и tabhost, а ещё первый фрагмент запускает на себе еще несколькоё)?

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 125. ViewPager

Сообщение snowkam » 26 сен 2013, 15:12

а кто нибудь разобрался как обновить ViewPager?
Я поступил очень некрасиво, просто убил Activity и заново создал, указав позицию фокуса для пейджера.

Буду ждать тут правильного и красивого решения .

Аватара пользователя
shtil
Сообщения: 27
Зарегистрирован: 04 июл 2013, 10:01

Re: Урок 125. ViewPager

Сообщение shtil » 26 сен 2013, 15:14

тоже интересно, но пока просто перегружаю адаптер для viewpager'a....

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 125. ViewPager

Сообщение snowkam » 01 окт 2013, 15:47

Всем Добрый День!
Исправил пост если кто читал я нашел ошибку вернее поставил костыль. Смысл такой нужно было связать данные 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, достаём нужный фрагмент и заполняем его.
Покажите примерчик как?

niixon
Сообщения: 24
Зарегистрирован: 13 окт 2013, 10:11

Re: Урок 125. ViewPager

Сообщение niixon » 13 окт 2013, 10:31

Подскажите пожалуйста. Просмотрев данный урок решил сделать вот такую задачу:

Есть активити1 - это главная активность. В ней находится еще 3 лэйаута. Допустим в 3ем лэйауте я хочу отобразить мой прокручивающийся вью из этого урока. Подскажите пожалуйста как можно это реализовать.

Проблема на данный момент заключается в том, что главная активи наследуется от Activity, и нельзя прям из нее все делать. Нужно в лэйаут номер 3 ложить лэйаут из файла, который наследуется от FragmentActivity. И я уже запутался и не смог придумать как же из главного активити запустить второе активити, чтобы оно показывалось в первом и прокручивало свой лэйаут толкьо в лэйауте номер 3.

Сейчас пришла идея на счет того, чтобы через интент запустить вторую активность и добавить в лэйаут 3 лэйаут из второй активности.

niixon
Сообщения: 24
Зарегистрирован: 13 окт 2013, 10:11

Re: Урок 125. ViewPager

Сообщение niixon » 13 окт 2013, 11:01

Не, все же подскажите кто знает как сделать так.

niixon
Сообщения: 24
Зарегистрирован: 13 окт 2013, 10:11

Re: Урок 125. ViewPager

Сообщение niixon » 13 окт 2013, 11:48

Прикрепляю пример
Вложения
test_Fragment.rar
проект.
(1.18 МБ) 152 скачивания

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 125. ViewPager

Сообщение Mikhail_dev » 14 окт 2013, 16:20

Создать фрагмент, в него вложить вьюпейджер. Дальше создать в главной активности контейнеты (к примеру FrameLayout), в которых и будут отображаться фрагменты. Во FrameLayout они к примеру заполняют всё пространство. Итого, можно сделать 3 контейнера в одной активности, куда и передавать фрагменты, которые заполнят эти самые контейнеры.

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 125. ViewPager

Сообщение snowkam » 31 окт 2013, 11:23

Никак не могу определить размер элементов расположенных во фрагменте.
Расположил во фрагменте 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() Возвращается ноль!

Как быть???


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

Re: Урок 125. ViewPager

Сообщение KamiSempai » 31 окт 2013, 12:46

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() Возвращается ноль!

Как быть???
Так у них же, в этом случае, еще даже Measure размеры не вычислились.
Гуглите "android measure view".
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

niosus
Сообщения: 1
Зарегистрирован: 11 ноя 2013, 21:13

Re: Урок 125. ViewPager

Сообщение niosus » 11 ноя 2013, 21:19

Добрый день!

У меня несколько отвлеченный вопрос.
на данный момент у меня есть viewPager, в котором хранятся 3 фрагмента. Так же, активити, в которой определен viewPager является контроллером в моей MVC. Она определяет кучу интерфейсов, в том числе UI интерфейс, который используют все 3 фрагмента для связи с активити.

Вопрос такой - сейчас я проверяю какой из фрагментов прислал событие по тэгу активного фрагмента и выглядит все это как-то очень коряво. Нет ли какого нибудь примера как объеденить viewPager с парадигмой model-view-controller или может кто знает ссылку на ресурс, де можно подсмотреть или проверить на сколько хороша текущая архитектура?

PS, я понимаю, что здесь может не лучшее место для этого, но я не знаю где бы еще спросить. Спасибо большое.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 125. ViewPager

Сообщение Mikhail_dev » 11 ноя 2013, 22:53

Если вкратце, то у нас такая же схема используется, правда несколько усложненная. Также через слушатели общаемся с фрагментов к активности, которая уже принимает решения.
Вопрос такой - сейчас я проверяю какой из фрагментов прислал событие по тэгу активного фрагмента и выглядит все это как-то очень коряво.
Я не совсем понял про какие Вы проблемы говорите. Делается слушатель, вызывается его метод и если и надо, то передается к примеру какой-то флаг того, кто вызвал метод. К примеру
mCallback.todoSomeMethod(someInformation, Utils.FRAGMENT_ONE);
а вообще лично у нас к разным фрагментам, обычно разные методы, а там где общие, там не важно кто вызвал. Как-то так.
На счет MVC сильно не заморачивайтесь. Советую почитать код приложения Google IO, исходный код которых есть в инете. Очень грамотно сделали они его, впрочем оно и сделано, дабы показать как правильно и красиво писать код под андроид.

ruslan_lepeha
Сообщения: 2
Зарегистрирован: 13 ноя 2013, 18:28

Re: Урок 125. ViewPager

Сообщение ruslan_lepeha » 13 ноя 2013, 21:47

Подскажите пожалуйста.
Как в PageFragment.java вызвать ContextMenu для текущей страницы??

Gargonis
Сообщения: 9
Зарегистрирован: 30 окт 2013, 22:19

Re: Урок 125. ViewPager

Сообщение Gargonis » 22 ноя 2013, 05:39

Добрый день!
Скажите, пожалуйста, как в ViewPager вставить ещё и OnClickListener, чтобы можно было после перелистывания страниц кликать на их содержимое, и, например, вызывать другое Activity?

Ответить