从父Activity调用Fragment方法
我在Android Fragments Dev Guide中看到,“活动可以通过使用findFragmentById()
或findFragmentByTag()
从FragmentManager获取对Fragment的引用来调用片段中的方法。
下面的例子展示了如何得到一个片段引用,而不是如何调用片段中的特定方法。
任何人都可以举例说明如何做到这一点? 我想从父活动的片段调用一个特定的方法。 谢谢。
- Android FragmentTransaction自定义animation(未知animation名称:翻译)
- 广播接收机内的服务
- 您可以在Android Marshmallow(API 23)的运行时权限模型中同步请求权限吗?
- 捕获在Android虚拟键盘上使用JavaScript键入的键
- 如何使用工具:build.gradle文件中的overrideLibrary?
不是完全正确的问题,因为它太简单了:
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);
- 为自定义源设置的Android的Gradle口味 – Gradle文件应该是什么样的?
- 如何在不触发Text Watcher的情况下更改EditText文本?
- onActivityResult RESULT_OK无法parsing为Android中的variables?
- 在WebView中点击表单字段不显示软键盘
- 以编程方式创build一个新的TextView,然后将其显示在另一个TextView下面
- 使用Alarmmanager在特定时间启动服务
- 左alignment文本,右边的checkbox
- Android类BaseAdapter中getItem和getItemId方法的意图是什么?
- android.content.res.Resources $ NotFoundException:无法find资源ID#0xffffffff