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

Обсуждение уроков
Аватара пользователя
alexmx
Сообщения: 193
Зарегистрирован: 10 мар 2014, 08:14

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

Сообщение alexmx » 23 апр 2014, 15:18

C mCallbacks = this пересмотр импортов помог сяпочки)))

avex
Сообщения: 24
Зарегистрирован: 22 дек 2013, 06:19

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

Сообщение avex » 04 июн 2014, 00:36

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

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

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

Сообщение Mikhail_dev » 04 июн 2014, 07:58

Везде пишут о их взаимодействии именно так, чтобы они друг о друге ничего не знали, т.е. они могут работать на одном экране, но общаться через другой компонент, например через Activity.

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

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

Сообщение Foenix » 04 июн 2014, 11:57

avex писал(а):Привет всем! Можно теоретический вопрос?
Везде пишется о взаимодействующих друг с другом фрагментах.
А могут ли быть независимые друг от друга, работающие
по отдельности, но на одном экране?
Взаимодействовать напрямую должны только зависимые фрагменты, например, когда фрагмент вызывает диалог-фрагмент.
В остальных случаях равноправные фрагменты не зависимы, не знают о том сколько еще таких же фрагментов и существуют ли они.
R.id.team

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

avex
Сообщения: 24
Зарегистрирован: 22 дек 2013, 06:19

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

Сообщение avex » 04 июн 2014, 15:09

Спасибо за ответы. Можно вопрос ближе к практике?
У меня есть простенькое приложение (всего два файлика – Main.java, SomeView (тут дан основной рабочий код) и макет main.xml), которое хочу заставить работать во фрагменте с тем, чтобы добавить еще один фрагмент – с кнопками и т.д. – SecondFragment. Так, чтобы они друг о друге ничего не знали.

Вот код Main.java:

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

public class Main extends Activity {

private SomeView view; 
   
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      RelativeLayout layout = 
         (RelativeLayout) findViewById(R.id.relativeLayout);
      view = new SomeView(this, getPreferences(Context.MODE_PRIVATE), 
         layout); 
      layout.addView(view, 0); 
   } 
   @Override
   public void onPause()    {
	   super.onPause();
	   view.pause(); 
   }    
   @Override
   public void onResume() {
	   super.onResume();
	   view.resume(this); 
   } 
}
Как бы вы посоветовали переделать это приложение? Понятно, что есть способ - в main.xml дать два фрагмента, куда поместить классы – SomeView и SecondFragment. Но он у меня стабильно не запускается, видимо, что-то делаю не то. Поэтому хочу спросить, есть ли способ (чтобы наверняка) совместить на одном экране два этих фрагмента?

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

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

Сообщение Foenix » 04 июн 2014, 16:01

данная тема раскрыта в уроках.
R.id.team

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

avex
Сообщения: 24
Зарегистрирован: 22 дек 2013, 06:19

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

Сообщение avex » 04 июн 2014, 20:46

>>данная тема раскрыта в уроках.

Не могу найти, подскажите, пожалуйста, в каких именно.
В моей ситуации не новое приложение, а с переделка существующего,
только поэтому возникли затруднения.

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

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

Сообщение Foenix » 04 июн 2014, 20:58

в тех, где есть в названии Fragments
R.id.team

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

avex
Сообщения: 24
Зарегистрирован: 22 дек 2013, 06:19

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

Сообщение avex » 04 июн 2014, 21:33

Ясно...
Если бы там были ответы, наверное, не спрашивал бы...
Давайте предоставим и другим желающим возможность помочь советом по моему вопросу, хорошо?
Тем более, вопрос по теме.
Наверняка, владеющие ею с легкостью направят в нужном направлении.

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

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

Сообщение Foenix » 04 июн 2014, 23:24

я щас не хочу даже копаться, но вы видимо невнимательно их читали. Я же по ним еще училась и читала, что автор учит как раз такому подходу - независимых фрагментов.
вот прям так
Так, чтобы они друг о друге ничего не знали.
Может я не поняла и вам что-то другое надо.
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 » 05 июн 2014, 09:35

Открыл уроки
http://startandroid.ru/ru/uroki/vse-uroki-spiskom.html
Далее:
в тех, где есть в названии Fragments
Нажал Ctrl+F, ввел "fragments" нашел 104, 105, 106, 109, 110, 11 урок
далее:
я чуть раньше писал
Везде пишут о их взаимодействии именно так, чтобы они друг о друге ничего не знали, т.е. они могут работать на одном экране, но общаться через другой компонент, например через Activity.
Ага, значит это "Урок 106. Android 3. Fragments. Взаимодействие с Activity"
И там (я специально пересмотрел урок) показано это взаимодействие. Даже строка в конце урока говорит нам
Второй фрагмент передал через интерфейс строку в Activity, а оно нашло первый фрагмент и отобразило там эту строку.
Вот еще статья по фрагментам на хабре http://habrahabr.ru/post/167315/

Кто ищет, тот всегда найдет.

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

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

Сообщение Foenix » 05 июн 2014, 11:24

Пожевал и в рот положил.
R.id.team

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

avex
Сообщения: 24
Зарегистрирован: 22 дек 2013, 06:19

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

Сообщение avex » 05 июн 2014, 13:44

Если б и я не имел желания отвечать по делу, я бы тоже отмахнулся, дав ближайшую ссылку) Не оригинально.
Я привел код из Main.java, если бы посмотрели, то сами поняли, что простой перенос невозможен -
это уже не раз мною проверено. Все статьи по фрагментам здесь читаны-перечитаны. Нужен толковый совет.
Замечу, не сделать за меня, а направить.

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

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

Сообщение Mikhail_dev » 05 июн 2014, 14:02

Я не нашел НИЧЕГО о том, что такое SomeView. Основной код? Ну так это ни о чем не говорит. Вызываете какие-то методы. Я толком так и не понял что вы хотите.
Как бы вы посоветовали переделать это приложение? Понятно, что есть способ - в main.xml дать два фрагмента, куда поместить классы – SomeView и SecondFragment. Но он у меня стабильно не запускается, видимо, что-то делаю не то. Поэтому хочу спросить, есть ли способ (чтобы наверняка) совместить на одном экране два этих фрагмента?
Да, есть. Они указаны в том уроке о котором я и написал. Там указано два фрагмента на одном экране, которые друг с другом взаимодействуют.
Я привел код из Main.java, если бы посмотрели, то сами поняли, что простой перенос невозможен -
это уже не раз мною проверено.
Что проверено? Перенос чего? Я ничего не вижу в вашем коде. Там ничего нет, что связано с фрагментами. Никаких транзакций добавлений, ничего! Вы пишете абстрактно. Никакой конкретики.

avex
Сообщения: 24
Зарегистрирован: 22 дек 2013, 06:19

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

Сообщение avex » 14 июн 2014, 22:50

Замучился уже. По фрагментам все получается - по урокам созданы два фрагмента, простые текстовые вьюшки они показывают.
Но мне нужно, чтобы один из фрагментов (который extends Fragment) делал то же, что и приведенный десятью постами выше код. Там в файле Main (который extends Activity) выводятся класс SomeView (который extends View) и main.xml. То есть, мне нужно вывести этот же класс и лэйаут.
Со лэйаутом все проще. Этот код...

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

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
...легко заменяется на

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

public View onCreateView(LayoutInflater inflater, ViewGroup container,
		      Bundle savedInstanceState) {
		    View v = inflater.inflate(R.layout.main, null);		    
		    return v;
Все остальное, если перенести в неизменном виде, подчеркивается (ошибки такие - The method findViewById(int) is undefined for the type Fragment2 и RelativeLayout cannot be resolved to a type). Вот этот код -

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

RelativeLayout layout =  
         (RelativeLayout) findViewById(R.id.relativeLayout); 
      view = new SomeView(this, getPreferences(Context.MODE_PRIVATE),  
         layout);  
      layout.addView(view, 0);  
   }  
   @Override 
   public void onPause()    { 
       super.onPause(); 
       view.pause();  
   }     
   @Override 
   public void onResume() { 
       super.onResume(); 
       view.resume(this);  
   }  
Помогите, пожалуйста, понять, как изменить этот код, или хотя бы где, в каком направлении, искать ответ. Все остальное прекрасно, дело только в данном вопросе.

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

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

Сообщение Viewer » 15 июн 2014, 04:23

[syntax=java]public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.main, null);

RelativeLayout layout =
(RelativeLayout) v.findViewById(R.id.relativeLayout);
view = new SomeView(this, getPreferences(Context.MODE_PRIVATE), layout);

layout.addView(view, 0);

return v;
}

[/syntax]
Последний раз редактировалось Viewer 15 июн 2014, 10:45, всего редактировалось 1 раз.

avex
Сообщения: 24
Зарегистрирован: 22 дек 2013, 06:19

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

Сообщение avex » 15 июн 2014, 10:13

Не помогает, к сожалению. Вы переставили возврат v в конец и продублировали создание view.

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

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

Сообщение Viewer » 15 июн 2014, 10:41

avex писал(а):Не помогает, к сожалению. Вы переставили возврат v в конец и продублировали создание view.
Это я копипастил из ваших постов, писал со смартфона, возможно лишнего "зацепил". Но смысл от этого не поменялся, у фрагментов нет методов для работы напрямую с корневым View с помощью findViewById как в Activity, поэтому его нужно сначала получить методом getView () либо воспользоваться в том месте, где он создается (как я вам показал в предыдущем посте в методе onCreateView ())

Что касается getView () то можете использовать его:
RelativeLayout layout = (RelativeLayout) getView ().findViewById(R.id.relativeLayout);

Подправил предыдущий пост, убрал дубликат

avex
Сообщения: 24
Зарегистрирован: 22 дек 2013, 06:19

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

Сообщение avex » 15 июн 2014, 11:25

Спасибо, getView() снимает часть вопросов, но они возникают теперь к следующей строке:
к view - "View cannot be resolved to a variable"
и к getPreferences - "The method getPreferences(int) is undefined for the type Fragment2"

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

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

Сообщение Viewer » 15 июн 2014, 11:38

avex писал(а): к view - "View cannot be resolved to a variable"
Это из вашего же кода, раз вы так написали, значит вы в классе должны были задекларировать (в азах ООП и Java нужно разбираться, иначе у вас ничего не получится)
avex писал(а): и к getPreferences - "The method getPreferences(int) is undefined for the type Fragment2"
А этот метод из Activity (точнее из контекста от которого она наследуется) поэтому вам нужно сначала получить Activity во фрагменте,
для этого у фрагментов есть метод getActivity()
Таким образом
getPreferences нужно заменить на getActivity().getPreferences

Ответить