Слушатель DatePickerDialog

Я делаю приложение для Android, в котором использую DatePickerDialog. Предполагаемая функция заключается в том, чтобы пользователь выбирал дату в диалоговом окне, а затем TextView отражал выбранную дату. Однако я не могу найти какой-либо прослушиватель кликов, чтобы уведомить мою активность, когда пользователь выбрал дату. Я ищу способ определить, когда пользователь выбрал дату, но из моей основной деятельности. Это мой DatePickerDialog класс:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

private GregorianCalendar date;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the picker
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    // Create a new instance of DatePickerDialog and return it
    return new DatePickerDialog(getActivity(), this, year, month, day);
}

@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {
    date = new GregorianCalendar(year, month, day);
}

public GregorianCalendar getDate() {
    return date;
}
}    

И код, где я запускаю диалог:

DialogFragment datePicker = new DatePickerFragment();
datePicker.show(getSupportFragmentManager(), "datePicker");

В настоящее время я запускаю диалог из класса, который расширяет Activity, и я ищу способ определить внутри этого класса, выбрал ли пользователь дату из диалога. Какие-либо предложения?


person Community    schedule 26.03.2015    source источник
comment
Это будет возможно, просто определив публичную функцию   -  person Avishek Das    schedule 26.03.2015
comment
Если ваша измененная дата будет вставлена ​​​​в текстовое представление, вам следует просто переопределить onTextChanged, чтобы проверить, изменена ли дата.   -  person Apurva    schedule 26.03.2015


Ответы (2)


Я рекомендую прочитать: Общение с другими фрагментами.

Activity должен реализовать DatePickerDialog.OnDateSetListener интерфейс:

public class MyActivity extends ActionBarActivity implements DatePickerDialog.OnDateSetListener {
    ...

    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        // the user selected, now you can do whatever you want with it
    }
}

Activity будет уведомлен, когда пользователь выберет дату, если вы добавите следующий код в класс DialogPickerFragment:

public class DatePickerFragment extends DialogFragment {
    private DatePickerDialog.OnDateSetListener mListener;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), mListener, year, month, day);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        if (!(context instanceof DatePickerDialog.OnDateSetListener)) {
            throw new IllegalStateException("Activity must implement fragment's callbacks.");
        }

        mListener = (DatePickerDialog.OnDateSetListener) activity;
    }

    @Override
    public void onDetach() {
        super.onDetach();

        mListener = null;
    }
}
person Ziem    schedule 26.03.2015
comment
Небольшое примечание: onAttach (активность) устарела, лучше использовать onAttach (контекстный контекст) - person Nikaoto; 31.05.2017

Самый простой способ..

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.DatePicker;

import java.util.Calendar;

public class MyDialogFragment extends DialogFragment implements     DatePickerDialog.OnDateSetListener {

OnDateSetListener mDateSetListener;


@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    final Calendar calendar = Calendar.getInstance();
    int yy = calendar.get(Calendar.YEAR);
    int mm = calendar.get(Calendar.MONTH);
    int dd = calendar.get(Calendar.DAY_OF_MONTH);
    return new DatePickerDialog(getActivity(), this, yy, mm, dd);
}


@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    if (this.mDateSetListener != null) {
        this.mDateSetListener.onDateSet(view, year, monthOfYear, dayOfMonth);
    }
}

public void setOnDateSetListener(OnDateSetListener dateSetListener) {
    this.mDateSetListener = dateSetListener;
}

public interface OnDateSetListener {
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth);
}

}

В своей деятельности сделайте это..

implement MyDialogFragment.OnDateSetListener;

MyDialogFragment myDialogFragment = new MyDialogFragment();
            myDialogFragment.show(getFragmentManager(), "DatePicker");
            myDialogFragment.setOnDateSetListener(this);

@Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
       //Here is your data..
    }
person Sjd    schedule 26.03.2015