Вызов метода фрагмента из родительской активности

Я вижу в руководстве Android Fragments Dev Guide, что «действие может вызывать методы в фрагменте, получая ссылку на фрагмент из FragmentManager, используя findFragmentById() или findFragmentByTag() ».

Следующий пример показывает, как получить ссылку на фрагмент, но не как вызвать определенные методы в фрагменте.

Может ли кто-нибудь привести пример того, как это сделать? Я хотел бы вызвать конкретный метод в фрагменте из родительской активности. Благодарю.

Solutions Collecting From Web of "Вызов метода фрагмента из родительской активности"

Не задавайте вопрос точно так же, как это слишком просто:

 ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); fragment.<specific_function_name>(); 

Если вы используете «import android.app.Fragment;» Затем используйте либо:

1)

 ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); fragment.specific_function_name(); 

Где R.id.example_fragment скорее всего является идентификатором FrameLayout внутри вашего xml-макета. ИЛИ

2)

 ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(“FragTagName”); fragment.specific_function_name(); 

Где FragTagName – это имя u, указанное при u:

 TabHost mTabHost.newTabSpec(“FragTagName”) 

Если вы используете «import android.support.v4.app.Fragment;» Затем используйте либо:

1)

 ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentById(R.id.example_fragment); fragment.specific_function_name(); 

ИЛИ

2)

 ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentByTag(“FragTagName”); fragment.specific_function_name(); 

Если вы используете библиотеку поддержки, вам нужно сделать что-то вроде этого:

 FragmentManager manager = getSupportFragmentManager(); Fragment fragment = manager.findFragmentById(R.id.my_fragment); fragment.myMethod(); 

Я считаю, что лучше всего проверить, добавлен ли фрагмент перед вызовом метода в фрагменте. Сделайте что-то подобное, чтобы избежать нулевого исключения.

 ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); if(fragment.isAdded()){ fragment.<specific_function_name>(); } 
  1. Если вы не используете Фрагмент библиотеки поддержки, выполните следующие действия:

((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();

2. Если вы используете Фрагмент библиотеки поддержки, выполните следующие действия:

((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();

Создайте интерфейс в первом фрагменте как:

 interface MessagePassing { public void sendMessage(String text); } 

Создайте свой экземпляр в onAttach (контекст контекста) как:

 messagepassing = (MessagePassing)context; 

Затем из вызова oncreateView ():

 messagepassing.sendMessage("hello"); 

Затем реализовать тот же интерфейс в MainActivity (откуда вы вызываете оба фрагмента)

Создать статический метод во втором фрагменте.

В реализованном методе sendMessage (String text) вызывает статический метод second, и сообщение успешно передано.

 SecondFragment.receiveMessage(text);