从父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>(); }
- 如果您不使用支持库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);