将字符串从对话框片段返回到活动 [重复]
Posted
技术标签:
【中文标题】将字符串从对话框片段返回到活动 [重复]【英文标题】:Returning String from Dialog Fragment back to Activity [duplicate] 【发布时间】:2013-02-13 19:23:30 【问题描述】:我已经阅读了很多关于此的帖子,但我找不到任何适用于此案例的帖子。
我有一个时间选择器对话框,我已将整数值放在一个字符串中,我需要将此字符串返回到主要活动。
这个字符串值将用于设置按钮的文本。
如果有人可以帮助我,将不胜感激。
谢谢
对话框片段
public class TimePickerFragment extends DialogFragment implements TimePickerDialog.OnTimeSetListener
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
// Use the current time as the default values for the picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity()));
public void onTimeSet(TimePicker view, int hourOfDay, int minute)
// Do something with the time chosen by the user
String Time =Integer.toString(hourOfDay) + " : " + Integer.toString(minute);
代码
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button btn = (Button) findViewById(R.id.start_time_button);
Button.setText(Time);
【问题讨论】:
【参考方案1】:首选方法是使用回调从Fragment
获取信号。另外,这是android在Communicating with the Activity提出的推荐方法
对于您的示例,在您的DialogFragment
中,添加一个接口并注册它。
public static interface OnCompleteListener
public abstract void onComplete(String time);
private OnCompleteListener mListener;
// make sure the Activity implemented it
@Override
public void onAttach(Activity activity)
super.onAttach(activity);
try
this.mListener = (OnCompleteListener)activity;
catch (final ClassCastException e)
throw new ClassCastException(activity.toString() + " must implement OnCompleteListener");
现在在你的Activity
中实现这个接口
public class MyActivity extends Activity implements MyDialogFragment.OnCompleteListener
//...
public void onComplete(String time)
// After the dialog fragment completes, it calls this callback.
// use the string here
现在在您的DialogFragment
中,当用户单击“确定”按钮时,通过您的回调将该值发送回Activity
。
public void onTimeSet(TimePicker view, int hourOfDay, int minute)
String time = Integer.toString(hourOfDay) + " : " + Integer.toString(minute);
this.mListener.onComplete(time);
【讨论】:
感谢您的回复,我唯一有点不确定的是活动中的班级。我为“FragmentActivity”添加了什么FragmentActivity
只是你的Activity
。你也可以在那里实现它。我会更新答案。
我认为它几乎可以工作了,我在线上的活动中有 1 个最后一个错误
很好的答案,但我在运行您的代码时遇到了 SuperNotCalledException。我需要在 onAttach 方法中添加 super.onAttach(activity)。
你需要调用 super.onAttach()以上是关于将字符串从对话框片段返回到活动 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从 BottomSheetDialogFragment 返回到父片段