从父活动调用片段方法

问题描述:

我在Android Fragments Dev Guide中看到,“活动可以通过使用findFragmentById()findFragmentByTag()获取对来自FragmentManager的片段的引用来调用片段中的方法。”从父活动调用片段方法

下面的示例显示如何获取片段引用,但不知道如何调用片段中的特定方法。

任何人都可以举例说明如何做到这一点?我想从父活动的Fragment中调用特定的方法。谢谢。

不了的问题,正是因为它太简单了:如果您使用的是支持库

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

好吧,这很容易,谢谢(我是碎片新品)。现在最难的部分是我似乎无法首先获得对片段的引用。它没有在XML布局中定义,所以我不能使用findFragmentById()。从我遵循的代码(参见上文)中我不清楚该片断甚至创建的方式/位置。如果是我可以只添加一个标签并使用findFragmentByTag()。该示例的AccountListActivity部分确实有对beginTransaction()。add()的调用,但根据我的跟踪,它从未被调用过。这是我挠头的地方。我很欣赏任何建议。 – gcl1

+0

对不起,我遗漏了参考。我所遵循的代码模式是[FragmentTabsPager](http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.html)。谢谢。 – gcl1

+0

当你既没有ID也没有与片段相关的TAG时,情况将会不同。 –

,你会想要做这样的事情:

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(); 
+1

我有一个ID为R.id.example_fragment的CoordinatorLayout,它的返回值为null。我正在使用导入android.support.v4.app.Fragment;该怎么办? – Kishore

+0

我建议你发布这个作为一个新的问题,并包括你的示例代码。没有看到实际的代码很难说出问题的根源。 – Gene

  1. 如果你不使用一个支持库片段,然后执行以下操作:

((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>(); 
}