Есть вариант сделать ViewFlipper'ом, но у него нет метода вроде show(int index), а есть только showNext/showPrev. А это мне не подходит. В общем, у меня есть менюха, которая выезжает сбоку.. как её.. NavigationView вроде. Там есть несколько пунктов, по нажатию на которые нужно менять 'экраны'. Насколько я понял - делается это через разные activity. Для каждого пункта меню свой activity. Есть способ по лучше? Ибо между этими пунктами будут передаваться данные, и ну уж очень неудобно передавать их через этот проклятый partialize или как его там. Передавать простые данные вроде string[] просто, но когда дело касается какой-то более сложно структуры начинается веселье.
Для каждого пункта меню свой Fragment, а host activity меняет фрагменты в зависимости от того что выбрал пользователь. Все веселье с parcelable на себя берет IDE (android studio).
Подскажите, каким образом обращаться скажем из фрагмента к инстансу класса в главном активити? Допустим, у меня вот в классе активити есть некий класс провайдер каких либо данных, которые мне необходимо пихать в seekBar. Если бы я делал это в классе активити, я бы просто написал findViewById(R.id.seekBar).setMax(myFooProvider.getMax()); - ну, грубо говоря. Каким же образом это сделать в фрагменте, если инстанс класса-провайдера мне !необходимо! хранить в классе активити, ибо при смене фрагментов - они удаляются из памяти. А инстанс провайдера должен работать независимо от того, какой сейчас фрагмент активен, ибо в нем происходят фоновые действия.
Я, конечно, могу делать по сути тоже самое в активити, а не в фрагменте
(я об этом:findViewById(R.id.seekBar).setMax(myFooProvider.getMax()); ), а даже пытался, но поскольку seekBar находится в фрагменте А, при смене на фрагмент Б здесь вылетает null reference, ибо seekBaк, как я понял, выгружается из памяти, или типа того. Проверять на null или на активность фрагмента? А не накладно ли будет по процессорному времени, если скажем подобная проверка будет проходить раз в 50 миллисекунд? Или особо не играет?
Решение с проверкой на null не очень :).
Можно сделать так:
1. Завести интерфейс FooProvider с методом getFoo().
2. Activity которая хостит фрагменты имплементит FooProvider интерфейс и в методе getFoo() возвращает обьект myFoo.
3. Во всех фрагментах где нужен MyFoo нужно переопределить метод onAttach(Activity a) или onAttach(Context c) взависимости от того какие фрагменты вы используете. В этот метод прилетает ваша Activity как параметр, вам надо ее скастить в FooProvider и сохранить в поле фрагмента fooProvider.
4. Дальше можно использовать MyFoo во фрагменте вот так: getView().findViewById(R.id.seekBar).setMax(fooProvider.getFoo().getMax()).