Как занести данные и взять данные из DatePicker?

229
21 октября 2017, 16:09

Делаю так: Создаю класс:

public class DatePicker extends DialogFragment
    implements DatePickerDialog.OnDateSetListener {
int year;
int month;
int day;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
   year = getArguments().getInt("year");
   month = getArguments().getInt("month") - 1;
   day = getArguments().getInt("day");
    // создаем DatePickerDialog и возвращаем его
    Dialog picker = new DatePickerDialog(getActivity(), this, year, month, day);

    return picker;
}
@Override
public void onStart() {
    super.onStart();
    // добавляем кастомный текст для кнопки
    Button nButton =  ((AlertDialog) getDialog())
            .getButton(DialogInterface.BUTTON_POSITIVE);
    nButton.setText(getResources().getString(R.string.Ok));
}
@Override
public void onDateSet(android.widget.DatePicker datePicker, int year,
                      int month, int day) {
    Button btDate = (Button) getActivity().findViewById(R.id.btDate);
    btDate.setText(day + "-" + month + "-" + year);
    Intent intent = new Intent();
    intent.putExtra("year",year);
    intent.putExtra("month",month);
    intent.putExtra("day",day);
    getTargetFragment().onActivityResult(getTargetRequestCode(), aInpData.RESULT_OK, intent);
}

}

Использую так:

public void onCl_btDate(View view) {
    Bundle args = new Bundle();
    args.putInt("year", idt.getYear());
    args.putInt("month", idt.getMonth());
    args.putInt("day", idt.getDay());
    DialogFragment dateDialog = new DatePicker();
    dateDialog.setArguments(args);
    dateDialog.setTargetFragment(dateDialog, GET_DATE);
    dateDialog.show(getSupportFragmentManager(), dateDialog.getClass().getName());
}

ловлю в

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    FLAG_EXIT = true;
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
            case GET_DATE:{
                int year = data.getIntExtra("year", 1);
            default:  break;
        }
    }
}

}

Как "вытащить" данные в виде переменных?

Answer 1

Вы можете передать к-л инфу через аргументы при запуске диалога. Используйте Bundle и Fragment#setArguments(Bundle args).

Если фрагмент запускаете из активити, то при его закрытии вызовите метод активити, передав туда нужные данные.

Если же вы захотите из фрагмента вызывать диалог, то вам поможет FragmentDialog#setTargetFragment(Fragment fr, int requestCode) - работает аналогично onActivityResult. Подробнее тут

READ ALSO
Соотношение потоков в Java с потоками в ОС

Соотношение потоков в Java с потоками в ОС

Как потоки в Java соотносятся с потоками в операционной системе ? Например, в UNIX системах есть системный вызов threadВызывается ли он при создании...

235
Android. Как программно воспроизвести ноты?

Android. Как программно воспроизвести ноты?

В проекте есть список нот:

216
должны ли быть готовые значения для тестирования api cпомощью постмана?

должны ли быть готовые значения для тестирования api cпомощью постмана?

Дали документацию api в которой только id вызываемых параметров, но их значений нетЧтобы отправить запрос по url адресу эти id, нужны ли мне уже...

197
Изменения Node в Java внутри метода

Изменения Node в Java внутри метода

Решил написать простейший метод - опустошить узел

265