【问题标题】: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);


    }

【问题讨论】:

    标签: android dialog


    【解决方案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()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多