Подтвердить что ты не робот

Возврат строки из диалогового фрагмента обратно в действие

Я прочитал много сообщений об этом, но я не могу найти что-либо применимое к этому случаю.

У меня есть диалог выбора времени, и я поместил целые значения в строку, и мне нужно вернуть эту строку к основному виду деятельности.

Это строковое значение будет использоваться для установки текста кнопки.

Если кто-то может помочь мне в этом, он будет очень признателен.

Спасибо

Диалоговый фрагмент

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);


    }
4b9b3361

Ответ 1

Предпочтительным методом является использование обратного вызова для получения сигнала от Fragment. Кроме того, это рекомендуемый метод, предложенный Android в Коммуникация с 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, когда пользователь нажимает кнопку OK, отправьте это значение обратно в Activity через ваш обратный вызов.

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    String time = Integer.toString(hourOfDay) + " : " + Integer.toString(minute);
    this.mListener.onComplete(time);
}