ANDROID - DialogFragment 上的 setOnDismissListener

Hyp*_*noZ 2 android android-dialogfragment

我有一个DialogFragment用于TimePickerDialog在按下a时显示 a button,我想将按钮的文本更改为新的时间设置。

我的问题是我不能叫setOnDismissListenerDialogFragment从我的Activity

这是我的 DialogDragment

 public class TimePickerFragment extends DialogFragment
        implements TimePickerDialog.OnTimeSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        int hour = Application.getSettings().getInt("hour", 11);
        int minute = Application.getSettings().getInt("minute", 11);

        // Create a new instance of TimePickerDialog and return it
        return new TimePickerDialog(getActivity(), this, hour, minute,
                DateFormat.is24HourFormat(getActivity()));
    }

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        FirstTimeLaunchSettingsActivity.hours = hourOfDay;
        FirstTimeLaunchSettingsActivity.minutes = minute;

    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我如何称呼这个 DialogFragment

    public void showTimePickerDialog(View v) {
    DialogFragment newFragment = new TimePickerFragment();
    newFragment.show(this.getFragmentManager(), "timePicker");
}
Run Code Online (Sandbox Code Playgroud)

我已经想制造Handleractivity这会refreshActivity每Seconde系列,但是这不是我想怎么解决这个问题。

我只是想,当我关闭我的DialogFragment按钮时,我的按钮被设置为我输入的时间。

谢谢你的帮助。

Dan*_*nai 5

您可以覆盖该onDismiss(DialogInterface dialog)方法,该方法将在DialogFragment解除时调用。您还可以使用内联覆盖从您的活​​动中执行此操作:

public void showTimePickerDialog(View v) {
    DialogFragment newFragment = new TimePickerFragment() {
        @Override
        public void onDismiss(DialogInterface dialog){
            // Add your code here
        }
    };
    newFragment.show(this.getFragmentManager(), "timePicker");
}
Run Code Online (Sandbox Code Playgroud)


Boo*_*tak 5

这是setOnDismissListener()对话片段的另一种方法

FragmentManager fm = getFragmentManager();

YourDialogFragment dialog = new YourDialogFragment();
dialog.show(fm,"Dialog Name");

fm.executePendingTransactions();
dialog.getDialog().setOnDismissListener(new DialogInterface.OnDismissListener() {
                    @Override
                    public void onDismiss(DialogInterface dialogInterface) {
                       //action when dialog is dismissed goes here
                    }
                });
Run Code Online (Sandbox Code Playgroud)

确保已执行 FragmentTransaction 工作。我们需要打电话

fm.executePendingTransactions();
Run Code Online (Sandbox Code Playgroud)

否则NullPointerException调用时可能会发生setOnDismissListener()