从父活动调用片段方法
问题描述:
我在Android Fragments Dev Guide中看到,“活动可以通过使用findFragmentById()
或findFragmentByTag()
获取对来自FragmentManager的片段的引用来调用片段中的方法。”从父活动调用片段方法
下面的示例显示如何获取片段引用,但不知道如何调用片段中的特定方法。
任何人都可以举例说明如何做到这一点?我想从父活动的Fragment中调用特定的方法。谢谢。
答
不了的问题,正是因为它太简单了:如果您使用的是支持库
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>();
答
,你会想要做这样的事情:
FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.my_fragment);
fragment.myMethod();
答
如果您使用“进口android.app.Fragment;” 然后使用:
1)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
其中R.id.example_fragment最有可能是xml布局中的FrameLayout id。 OR
2)
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(“FragTagName”);
fragment.specific_function_name();
哪里FragTagName是当ü没有ü指定的名称:
TabHost mTabHost.newTabSpec(“FragTagName”)
如果您正在使用“导入android.support.v4.app。片段;“ 然后使用:
1)
ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentById(R.id.example_fragment);
fragment.specific_function_name();
OR
2)
ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentByTag(“FragTagName”);
fragment.specific_function_name();
答
- 如果你不使用一个支持库片段,然后执行以下操作:
((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
2.如果您使用的是支持库片段,然后执行以下操作:
((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();
答
我认为最好是检查片段在片段调用方法前加入。做这样的事情来避免null异常。
ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
if(fragment.isAdded()){
fragment.<specific_function_name>();
}
好吧,这很容易,谢谢(我是碎片新品)。现在最难的部分是我似乎无法首先获得对片段的引用。它没有在XML布局中定义,所以我不能使用findFragmentById()。从我遵循的代码(参见上文)中我不清楚该片断甚至创建的方式/位置。如果是我可以只添加一个标签并使用findFragmentByTag()。该示例的AccountListActivity部分确实有对beginTransaction()。add()的调用,但根据我的跟踪,它从未被调用过。这是我挠头的地方。我很欣赏任何建议。 – gcl1
对不起,我遗漏了参考。我所遵循的代码模式是[FragmentTabsPager](http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.html)。谢谢。 – gcl1
当你既没有ID也没有与片段相关的TAG时,情况将会不同。 –