2013-05-11 5 views
0

На основе примера из http://developer.android.com/training/basics/fragments/communicating.html Я попытался воспроизвести связь между двумя фрагментами, которые являются фрагментами фрагмента большего фрагмента.Коммуникация между фрагментами в Android

В примере Активность AB содержит фрагмент и фрагмент B. Но я пытаюсь добиться того же, но в моем случае AB Fragment содержит фрагмент и фрагмент B.

Проблема заключается в переопределенном методе в фрагменте AB, который никогда не вызывается. Не работает ли это, потому что содержащий компонент является фрагментом, а не активным, как в примере? Я что-то пропускаю здесь?

+1

Можете ли вы предоставить свой код? –

ответ

2

Если вы имеете в виду onClick() или какой-либо другой обработчик onSomething(), то они всегда вызываются в классе Activity, а не в фрагменте. Поэтому в примере, который вы связали, onArticleSelected() должен оставаться в Activity, даже если у вас есть вложенные фрагменты.

Чтобы передать информацию об этом фрагменте, у вас есть несколько вариантов. Во-первых, вы можете сохранить ссылку на фрагмент внутри действия. Это может быть потеряно, если ваша активность воссоздается (например, событие настройки).

Второй и лучший способ - пометить ваши фрагменты, а затем использовать findFragmentByTag.

При добавлении фрагмент (обратите внимание на параметр «my_fragment», который является тег я дал фрагмент):

getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, myFragment, "my_fragment").commit(); 

Или когда вы заменить один фрагмент другим:

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, myFragment, "my_fragment").comit(); 

Затем, когда вы хотите что-то сделать в фрагменте из вашего onArticleSelected вида деятельности:

Fragment fragment = getSupportFragmentManger().findFragmentByTag("my_fragment"); 
if (fragment != null) { 
    fragment.articleSelected(articleId); 
} 
+0

Но опять же (предполагается, что onArticleSelected() находится в действии). Как мне связать активность с другим вложенным фрагментом? Предполагаю, что правильный вариант Фрагмента правильный. Мне нужно получить доступ к методам вложенного фрагмента с помощью уже созданной ссылки – Jani

+0

Теперь я задаю вопрос. Изменит мой ответ. – tbkn23

+0

Просто для записей, добавляя, что интерфейсы, передающие элемент управления и поддерживающие ссылку на фрагмент, будут им ... Хотя не уверены, сколько эффективного решения это учитывает тот факт, что ссылка на фрагмент включена – Jani

0

Вы можете всегда использовать Interface для связи между фрагментами. Это самый безопасный способ сделать это.

Смежные вопросы