Урок 104. Android 3. Fragments. Lifecycle

Обсуждение уроков
Realist
Сообщения: 134
Зарегистрирован: 08 фев 2014, 18:15

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение Realist » 20 сен 2014, 20:45

Foenix писал(а): ну элегантным решение не назовешь. Присутствие таймера в программе - плохой код.
Да я шучу ;) Просто в моем случае эта секунда действительно не критична.
Foenix писал(а):Лучше изучить их жизненный цикл получше и сделать что хочешь.
Михаил посоветовал пока этим голову не засорять :D

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

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение Foenix » 20 сен 2014, 20:54

Михаила слушаться надо, это его любимая фраза.
R.id.team

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

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

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение Mikhail_dev » 20 сен 2014, 22:59

Да я шучу ;) Просто в моем случае эта секунда действительно не критична.
Ну вот к примеру у меня устройство порой тупит на несколько секунд, потому что внутренняя память похоже умирает (физически умирает), а за это время секунда пройдет

Я не пойму, почему не сделать быстро и практично, дабы не зависеть от таймера (с таймером кода больше =) )
С фрагмента, с метода onActivityCreated шлем
[syntax=java5]
getActivity().sendBroadcast(new Intent("I_WAS_CREATED"));
[/syntax]
В активности ловим данный. Создаем бродкаст в методе onCreate активности, например.
[syntax=java5]
private void createCommonReceiver() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("I_WAS_CREATED");
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals("I_WAS_CREATED")) {
//если сюда зашли, значит фрагмент создался
}
}
};
this.registerReceiver(broadcastReceiver, intentFilter);
}
[/syntax]
Всё, мы точно знаем когда создастся фрагмент.
Михаила слушаться надо, это его любимая фраза.
:ugeek:

Realist
Сообщения: 134
Зарегистрирован: 08 фев 2014, 18:15

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение Realist » 21 сен 2014, 09:40

Mikhail_dev писал(а):
Я не пойму, почему не сделать быстро и практично, дабы не зависеть от таймера (с таймером кода больше =) )
Даже не знаю что и сказать.. Сделал и действительно работает. Причем и через броадкаст, и через интерфейс. Когда делал это 2 недели назад, то фрагмент добавлялся только при запуске приложения. А после поворота экрана не хотел добавляться ни после onActivityCreated, ни после onStart, ни после onResume. Видать напортачил тогда где то..

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

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение Mikhail_dev » 21 сен 2014, 13:39

Не забывай делать unregisterReceiver данного бродкаста, чтобы не получить утечку.

Marimarti
Сообщения: 17
Зарегистрирован: 19 дек 2014, 21:29

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение Marimarti » 19 дек 2014, 22:06

Всем привет! Подскажите кто знает.
В общем, понадобилось разместить на активити много элементов, но т.к. в режиме дизайна не получается разместить элементы в не границ активити, то решил сделать при помощи фрагментов, как в этом уроке. Все получилось, только без ScrollView, естественно, не скролится, но когда использую ScrollView, как контейнер - оба фрагмента помещаю в него, то приложение падает с ошибками, хотя компилируется нормально. Как победить?

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

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение Mikhail_dev » 19 дек 2014, 22:49

Показать ошибку падения. Как узнать - посмотрите у меня в подписи ссылку на вебинар.

Marimarti
Сообщения: 17
Зарегистрирован: 19 дек 2014, 21:29

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение Marimarti » 20 дек 2014, 01:26

Mikhail_dev писал(а):Показать ошибку падения. Как узнать - посмотрите у меня в подписи ссылку на вебинар.
К сожалению сейчас не обладаю хорошим каналом чтобы посмотреть, но в ближайшее время посмотрю.
Вот лог ошибки:

Код: Выделить всё

4997-4997/com.zzz.myapplication E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zzz.myapplication/com.zzz.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #21: Error inflating class fragment
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2146)
            at android.app.ActivityThread.access$700(ActivityThread.java:140)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:177)
            at android.app.ActivityThread.main(ActivityThread.java:4947)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #21: Error inflating class fragment
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:710)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
            at com.zzz.myapplication.MainActivity.onCreate(MainActivity.java:30)
            at android.app.Activity.performCreate(Activity.java:5207)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2085)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2146)
            at android.app.ActivityThread.access$700(ActivityThread.java:140)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:177)
            at android.app.ActivityThread.main(ActivityThread.java:4947)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalArgumentException: Binary XML file line #21: Must specify unique android:id, android:tag, or have a parent with an id for com.zzz.myapplication.Fragment2
            at android.app.Activity.onCreateView(Activity.java:4813)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:686)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:752)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:760)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
            at com.zzz.myapplication.MainActivity.onCreate(MainActivity.java:30)
            at android.app.Activity.performCreate(Activity.java:5207)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2085)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2146)
            at android.app.ActivityThread.access$700(ActivityThread.java:140)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1238)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:177)
            at android.app.ActivityThread.main(ActivityThread.java:4947)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
            at dalvik.system.NativeStart.main(Native Method)


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

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение Foenix » 20 дек 2014, 01:36

тогда по ссылкам в подписи.
R.id.team

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

finberg
Сообщения: 51
Зарегистрирован: 11 мар 2013, 14:20

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение finberg » 20 дек 2014, 11:10

Caused by: android.view.InflateException: Binary XML file line #21: Error inflating class fragment
Caused by: java.lang.IllegalArgumentException: Binary XML file line #21: Must specify unique android:id, android:tag, or have a parent with an id for com.zzz.myapplication.Fragment2

Проверяйте разметку фрагментов.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение altwin » 22 фев 2015, 18:08

Думаю лучше без комментариев просто оставлю тут полноценную схему жизненного цикла activity и fragments. https://raw.githubusercontent.com/xxv/a ... ecycle.png
Изображение

TRN7
Сообщения: 1
Зарегистрирован: 04 ноя 2015, 13:42

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение TRN7 » 04 ноя 2015, 13:55

Был предыдущий урок (102. Touch – обработка касания), был так же и наглядный пример.
Но вот как повторить тоже самое в области фрагмента?
Т.е. уроки идут один за одним, но ума пока самостоятельно всё это совместить не хватает.
Иначе говоря - каким образом(и главное возможно ли?) выводить геометрические фигуры во фрагментах?

t0psecret
Сообщения: 7
Зарегистрирован: 27 янв 2016, 14:16

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение t0psecret » 11 фев 2016, 21:08

у меня onAttach(Activity activity) depricated
а onAttach(Context context) не вызывается при создании

Serega_Alfach
Сообщения: 5
Зарегистрирован: 13 авг 2016, 17:54

Re: Урок 104. Android 3. Fragments. Lifecycle

Сообщение Serega_Alfach » 14 окт 2016, 20:55

t0psecret писал(а):у меня onAttach(Activity activity) depricated
а onAttach(Context context) не вызывается при создании
Столкнулся тоже с такой проблемой, после первой ссылки в Google на StackOverflow:
http://stackoverflow.com/questions/3208 ... deprecated
прочёл такую вещь :
If you use the the framework fragments and the SDK version of the device is lower than 23, OnAttach(Context context) wouldn't be called.

I use support fragments instead, so deprecation is fixed and onAttach(Context context) always gets called.
Т.е чтобы

Код: Выделить всё

onAttach(Context context)
"вызывался при создании" нужно наш класс фрагмента наследовать не от android.app.Fragment а от android.support.v4.app.Fragment и всё будет корректно работать. По крайней мере мне помогло.

Ответить