我有一个带有自定义布局的对话框片段(AddAlarmDialogFragment
),在单击TextView后,它会启动另一个TimePickerFragment
。
TimePickerFragment正在显示TimePickerDialog。
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
return new TimePickerDialog(getActivity(),TimePickerDialog.THEME_HOLO_LIGHT, this, hour, minute,
true);
}
到目前为止一切正常,但我希望TimePickerFragment将有关选择时间的信息传递给父DialogFragment
我让TimePickerFragment实现TimePickerDialog.OnTimeSetListener,
来覆盖回调方法onTimeSet(TimePicker view, int hourOfDay, int minute)
。
我还在TimePickerFragment
中声明了我的界面 public interface OnTimePickedListener {
void timePicked(int hour, int minutes);
}
方法timePicked(int hour, int minutes)
在onTimeSet(TimePicker view, int hourOfDay, int minute)
这是callBack的整个代码
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
OnTimePickedListener onTimePickedListener=
OnTimePickedListener)getParentFragment();
onTimePickedListener.timePicked(hourOfDay,minute);
}
这是一个问题,我希望将时间从TimePickerDialog
传递到AddAlarmDialogFragment
,因此启动TimePickerFragment
的DialogFragment
有没有办法从父dialogFragment获取此接口的实例。或者可能有更好的方法来提供这两个组件之间的通信,因为我定义OnTimePickedListener
与TimePickerDialog.OnTimeSetListener
几乎完全相同的方法似乎不知道是什么使代码清理。
答案 0 :(得分:1)
getParentFragment()
未获得父级,因为您正在使用FragmentManager
的{{1}}。要使Activity
有效,您需要在执行片段事务时使用getParentFragment()
。
但是,出于您的目的,您应该利用片段标记功能找到您要查找的片段:
getChildFragmentManager()
答案 1 :(得分:0)
在应用程序的不同部分之间进行通信的方法很少,而不会在它们之间传递引用。 (脱钩)
如果您认为您的代码会增长并且您将会有几个组件相互交流,那么您可能需要考虑一个完整的解决方案。 您可以使用android LocalBroadcastManager或甚至更多建议使用eventbus实现来实现此目的。 事件总线的替代品很少。