我一直在网上寻找和搜索,甚至试图检查官方Android文档的"片段之间的通信"或与片段和活动通信(http://developer.android.com/training/basics/fragments/communicating.html),甚至试图在StackOverflow上搜索几个问题只是为了得到一个提示我的问题,但他们似乎都没有回答我的情况。
我知道由主机Activity
实现的接口侦听器将数据从Fragment
传递到主机Activity
,并在我的项目中大量使用它。但我认为,片段数据传递的模型实际上是有用的,只有当有一个"元"事件,即onClick
, onItemClick
,等),将触发自定义事件。
但是对于我的情况,我有一个包含RadioGroup
的片段,与RadioGroup
的内容,首先是一个具有几个EditText
的视图组,其中我需要将其内容发送回Fragment的主机活动与其他几个对象。我的自定义事件是由一个"元"事件,即RadioGroup.setOnCheckedChangeListener()
。为了可视化,这是我的布局资源
RadioGroup
-RadioButton 1
—LinearLayout(通过选中RadioButton 1切换为显示,当选中其他RadioButton时隐藏)包含几个EditText
——EditText 1
——EditText 2
——EditText 3
——EditText 4
-RadioButton 2
-RadioButton 3
-RadioButton 4
每次我检查RadioButton 1时,它切换到显示EditText的LinearLayout,显然它触发了RadioGroup的setOnCheckedChangeListener(),在其中它触发了我的自定义事件,参数像一个自定义对象的内容来自EditText s。然而,我的自定义事件不会被调用,当我不检查RadioGroup,当我编辑/更新EditText。
我想在这些EditText
上使用EditText.addTextChangedListener()
,并在填写表单上的所有数据时触发我的自定义事件。但我认为这样做有点不优雅,我想会有一个更优雅和更好的,如果有的话,传递那些EditText数据的方式从他们的主机片段回到活动,或者可能是从片段中获得数据到活动
我的问题是,我如何通过或从片段获取数据到活动中,我不会依赖于"元"事件来触发我的自定义事件或以其他方式。
为了与我的活动进行通信,我只需添加一个片段可以直接调用的方法。在Activity类中:
public void sendMessage(String message) {
// Do something with the message
}
在片段中:
((MyActivity)getActivity()).sendMessage("Code Apprentice is the best!");