Ответ 1
не задайте вопрос точно так же, как это слишком просто:
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>();
Я вижу в Android Fragments Dev Guide, что "действие может вызывать методы в фрагменте, получая ссылку на фрагмент из FragmentManager, используя findFragmentById()
или findFragmentByTag()
."
В следующем примере показано, как получить ссылку на фрагмент, но не как вызвать определенные методы в фрагменте.
Может ли кто-нибудь привести пример того, как это сделать? Я хотел бы вызвать конкретный метод в фрагменте из родительской активности. Спасибо.
не задайте вопрос точно так же, как это слишком просто:
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();
((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
2. Если вы используете Фрагмент библиотеки поддержки, выполните следующие действия:
((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
Я думаю, что лучше всего проверить, добавлен ли фрагмент перед вызовом метода в фрагменте. Сделайте что-то подобное, чтобы избежать нулевого исключения.
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
if(fragment.isAdded()){
fragment.<specific_function_name>();
}