Форум программистов, компьютерный форум CyberForum.ru

Ссылка на фрагмент - Android

Восстановить пароль Регистрация
 
danek130995
 Аватар для danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 819
17.10.2015, 19:01     Ссылка на фрагмент #1
В уроке 106 проекта startandroid.ru написано, что
На всякий случай проговорю одну вещь из разряда «Спасибо кэп!». Если посмотреть на код MainActivity, то можно заметить, что работая с frag2 в методе onCreate и с frag2 в методе onClick мы работаем с текущим фрагментом Fragment2. Это так и есть. Оба frag2 в итоге будут ссылаться на один объект. Так что, если вы динамически добавили фрагмент, то у вас уже есть ссылка на него, и искать его через findFragmentById вам уже не надо.
Звучит логично, вот код MainActivity:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Fragment frag2 = new Fragment2();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.add(R.id.fragment2, frag2);
        ft.commit();
    }
 
    public void onClick(View v) {
        Fragment frag2 = getFragmentManager().findFragmentById(R.id.fragment2);
        ((TextView) frag2.getView().findViewById(R.id.textView))
                .setText("Access to Fragment2 from Activiry");
    }
Я решил данное утверждение проверить-изменил код так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MainActivity extends AppCompatActivity {
    Fragment frag2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Fragment frag2 = new Fragment2();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.add(R.id.fragment2, frag2);
        ft.commit();
    }
 
    public void onClick(View v) {
        Fragment frag1 = getFragmentManager().findFragmentById(R.id.fragment1);
        ((TextView) frag1.getView().findViewById(R.id.textView))
                .setText("Access to Fragment1 from Activiry");
 
       // Fragment frag2 = getFragmentManager().findFragmentById(R.id.fragment2);
        ((TextView) frag2.getView().findViewById(R.id.textView))
                .setText("Access to Fragment2 from Activiry");
    }
Т.е. я объявил глобальную переменную frag2, и теперь хочу обратиться к фрагменту без поиска(закомментированная строка), как пишет автор,
Так что, если вы динамически добавили фрагмент, то у вас уже есть ссылка на него, и искать его через findFragmentById вам уже не надо.
Но приложение вылетает. Помогите пожалуйста, может я где-то ошибся?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2015, 19:01     Ссылка на фрагмент
Посмотрите здесь:

Android Фрагмент и карты
Android CursorLoader и фрагмент
Android Доступ из активити в фрагмент
Android Не создается фрагмент
Android OnActivityResult из сервис во фрагмент
Как закрыть фрагмент? Android
Как закрыть фрагмент Android
Android Переход из ListActivity в Фрагмент
Android Фрагмент и статическое поле
Фрагмент поверх другого Android
Вернуться во фрагмент с данными? Android
Android Фрагмент сжимается в активити

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 06:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru