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

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

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

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

Ответ 1

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

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

Ответ 2

Если вы используете "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(); 

Ответ 3

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

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

Ответ 4

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

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


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

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

Ответ 5

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

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
if(fragment.isAdded()){
  fragment.<specific_function_name>(); 
}