从父Activity调用Fragment方法

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

下面的例子展示了如何得到一个片段引用,而不是如何调用片段中的特定方法。

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

不是完全正确的问题,因为它太简单了:

 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最有可能是xml布局中的FrameLayout id。 要么

2)

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

在哪里FragTagName是你指定的名字:

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

我认为最好的方法是在调用fragment中的方法之前检查是否添加了fragment。 做这样的事情,以避免空例外。

 ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); if(fragment.isAdded()){ fragment.<specific_function_name>(); } 
  1. 如果您不使用支持库Fragment,请执行以下操作:

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

2.如果您使用支持库Fragment,请执行以下操作:

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

在First Fragment中创build一个接口为:

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

在onAttach(Context context)中创build它的实例:

 messagepassing = (MessagePassing)context; 

然后从oncreateView()调用:

 messagepassing.sendMessage("hello"); 

然后在MainActivity中实现相同的接口(从你正在调用这两个片段)

在第二个片段中创build一个静态方法。

在实现的方法中,sendMessage(String text)调用第二个静态方法,并且你的消息被成功传输。

 SecondFragment.receiveMessage(text);