Настроить имя DatePickerDialog навсегда - программирование

Настроить имя DatePickerDialog навсегда

У меня проблема, когда я пытаюсь установить имя DatePickerDialog навсегда.

DatePickerFragment.java

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    @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
    DatePickerDialog dpd = new DatePickerDialog(getActivity(), this, year, month, day);
    dpd.setTitle("set date");
    return dpd;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
    // Do something with the date chosen by the user
    }
}

MainActivity.java

public class MainActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = (Button) findViewById(R.id.button1);

        btn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                DialogFragment newFragment = new DatePickerFragment();
                newFragment.show(getSupportFragmentManager(), "datePicker");

            }
        });
    }
}

Когда я нажимаю кнопку DatePickerDialog показывает, и заголовок диалогового окна "задана дата", но когда я меняю дату, название содержит выбранную дату, а не "установить дату". Как я могу установить этот заголовок диалога навсегда?

Протестировано по API 8-10.

Спасибо вам заранее и извините за мой английский. Патрик

4b9b3361

Ответ 1

Как насчет расширения DatePickerDialog и добавления метода setPermanentTitle для хранения постоянного заголовка, который будет принудительно изменен при изменении даты?

public class MyDatePickerDialog extends DatePickerDialog {

    private CharSequence title;

    public MyDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
        super(context, callBack, year, monthOfYear, dayOfMonth);
    }

    public void setPermanentTitle(CharSequence title) {
        this.title = title;
        setTitle(title);
    }

    @Override
    public void onDateChanged(DatePicker view, int year, int month, int day) {
        super.onDateChanged(view, year, month, day);
        setTitle(title);
    }
}

И затем используйте новый метод setPermanentTitle:

    MyDatePickerDialog dpd = new MyDatePickerDialog(this, null, 2012, 10, 10);
    dpd.setPermanentTitle("set date");

Ответ 2

Расширьте DatePickerDialog и переопределите метод setTitle().

public class MyDatePickerDialog extends DatePickerDialog {

   public MyDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
       super(context, callBack, year, monthOfYear, dayOfMonth);
   }

   public void setTitle(CharSequence title) {
       super.setTitle(*<whatever title you want>*);
   }
}

Ответ 3

Вы всегда можете использовать AlertDialog и вызывать setView, передавая экземпляр DatePicker.

См. пример кода ниже:

DatePicker datePicker = new DatePicker(getActivity());
    datePicker.setCalendarViewShown(false);

new AlertDialog.Builder(getActivity())
    .setTitle("Your title")
    .setView(datePicker)
    .create().show();

Это гарантирует, что заголовок будет установлен только вами.

Ответ 4

Учитывая опыт пользователей на небольших экранах, я бы предложил не сохранять постоянный титул. Вот модификация кода Джона:

public class MyDatePickerDialog extends DatePickerDialog {

    private CharSequence title;

    public MyDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth, CharSequence title) {
        super(context, callBack, year, monthOfYear, dayOfMonth);
        this.title = title;
        setTitle(title);
    }

    @Override
    public void onDateChanged(DatePicker view, int year, int month, int day) {
        super.onDateChanged(view, year, month, day);
        if (getDatePicker().getCalendarViewShown()) {
            setTitle(title);
        }
    }
}

И вызовите DatePickerDialog следующим образом:

MyDatePickerDialog datePickerDialog = new MyDatePickerDialog(this, null, 2012, 10, 10, "My Title");

Ответ 5

Создайте настраиваемый заголовок следующим образом:

TextView title = new TextView(getActivity());
title.setText(getResources().getString(R.string.calendar_start_title));
datePickerDialog.setCustomTitle(title);