Как создать диалоги datePicker и timePicker в classе fragmentов?

Я хочу знать, есть ли способ создать datePicker во fragmentе? Я создаю одно регулярное действие, и это дает мне синтаксическую ошибку. Каков правильный способ сделать это?

Скорее всего, вам придется использовать DialogFragment. Я нашел здесь некоторую информацию:

Показать диалог из fragmentа?

а также большую помощь здесь:

https://github.com/commonsguy/cw-advandroid/blob/master/Honeycomb/FeedFragments/src/com/commonsware/android/feedfrags/AddFeedDialogFragment.java

Это должно помочь вам встать на пути, я делаю это сейчас. Хотя внутри кода примера я не использую построитель и вместо этого просто возвращаю:

return new DatePickerDialog(getActivity(), mDateSetListener, mYear, mMonth, mDay); 

Кажется, что это работает … хотя я еще не могу понять, как обновить текст на fragmentе, который вызывает этот DialogFragment. Я думал, что это сработает, а это не так:

  public void updateDisplay() { //update our button text from the calling fragment, this isn't quite working //doesn't crash just doesn't update...must be missing something. View v=getActivity() .getLayoutInflater() .inflate(R.layout.session_edits, null); Button sessionDate = (Button)v.findViewById(R.id.sessionPickDate); sessionDate.setText(new StringBuilder() .append(mMonth+1).append("-").append(mDay).append("-").append(mYear).append(" ")); } 

Расширение ответа Codejoy:

Вот мой class DatePickerDialogFragment:

 public class DatePickerDialogFragment extends DialogFragment { private Fragment mFragment; public DatePickerDialogFragment(Fragment callback) { mFragment = callback; } public Dialog onCreateDialog(Bundle savedInstanceState) { return new DatePickerDialog(getActivity(), (OnDateSetListener) mFragment, 1980, 7, 16); } } 

(Обратите внимание, что конструктор принимает fragment, который использует это диалоговое окно, и мы используем эту ссылку для поля прослушивания обратного вызова для DatePickerDialog)

Мой fragment затем просто реализует onDateSetListener:

 public class SignupFragment extends Fragment implements OnDateSetListener { ... public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // do stuff with the date the user selected } } 

… и затем я показываю диалог из моего fragmentа следующим образом:

 FragmentTransaction ft = getFragmentManager().beginTransaction(); DialogFragment newFragment = new DatePickerDialogFragment(this); newFragment.show(ft, "dialog"); 

Не уверен, что это лучший способ сделать это, но, похоже, работает нормально.

Хотя выше ответы могут работать, я считаю, что у меня гораздо более легкое решение:

 DatePickerDialog dialog = new DatePickerDialog(getActivity(), datePickerListener, 2000, 1,1); dialog.show(); 

Где datePickerListerener выглядит примерно так:

 private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { // when dialog box is closed, below method will be called. public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { //Do whatever you want } }; 

Предыдущие помощники объясняют достаточно хорошо, но вот как я изменил метод onDateSet вида DialogFragment.

Вы можете передать представление, которое хотите изменить, на конструктор classа, расширяющий DialogFragment. Затем вызовите метод setText метода onDateSet classа. Вот код:

 public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { public EditText activity_edittext; public DatePickerFragment(EditText edit_text) { activity_edittext = edit_text; } @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 view, int year, int month, int day) { activity_edittext.setText(String.valueOf(month + 1 ) + "/" + String.valueOf(day) + "/" + String.valueOf(year)); } } 

Затем вы можете показать свой fragment следующим образом:

 public void showDatePickerDialog(View v) { new DatePickerFragment((EditText) v).show(getSupportFragmentManager(), "datePicker"); } 

Установите этот метод в методе ClickClick EditText, который вы хотите изменить. Как это:

    

Вот fragment, который хотел бы использовать datepicker во fragmentе:

 private Callbacks mCallbacks; private String tag; /** * A callback interface that all fragments/activities containing this fragment must * implement. This mechanism allows activities to be notified of item * selections. */ public interface Callbacks { /** * Callback for when an item has been selected. */ public void onSelected(Date date, String tag); } public static DatePickerFragment newInstance(Fragment fragment, Date date, String tag) { DatePickerFragment dateFragment = new DatePickerFragment(); Calendar c = Calendar.getInstance(); if (date != null) { c.setTime(date); } dateFragment.setYear(c.get(Calendar.YEAR)); dateFragment.setMonth(c.get(Calendar.MONTH)); dateFragment.setDay(c.get(Calendar.DAY_OF_MONTH)); dateFragment.setmCallbacks((Callbacks) fragment); dateFragment.setTag(tag); return dateFragment; } public void onDateSet(DatePicker view, int year, int month, int day) { // Do something with the date chosen by the user Calendar cal = Calendar.getInstance(); cal.set(year, month, day); date = new Date(cal.getTime().getTime()); setType(1); mCallbacks.onSelected(date,tag); } 

и в вашем fragmentе:

  public class DetailFragment extends Fragment implements DatePickerFragment.Callbacks { 

, , ,

  private void startDatePicker(String tag) { DialogFragment newFragment = DatePickerFragment.newInstance(this, invoiceModell.getInvoice().getInvoiceDate(), tag); newFragment.show(getActivity().getSupportFragmentManager(), "datePicker"); } @Override public void onSelected(Date date, String tag) { if (tag.equals(FIRSTDATE)) invoiceModell.getInvoice().setInvoiceDate(date); else if (tag.equals(SECONDDATE)) invoiceModell.getInvoice().setDueDate(date); } 
  • Как написать код для создания sharedpreferences для массива в android?
  • Оценить приложение Google Play прямо в приложении
  • Выбрана фотография с помощью нового приложения Google Фото
  • Сохранение флажков
  • Как изменить значки меню навигации и переполнения панели инструментов (appcompat v7)?
  • Можно ли настроить собственный шрифт для всего приложения?
  • Как использовать скольжение для загрузки изображения в bitmap?
  • Как использовать TabLayout с панелью инструментов внутри CollapsingToolbarLayout?
  • Могу ли я повторно подписать .apk с другим сертификатом, чем тот, с которым он пришел?
  • Как добавить fragment в действие с программно созданным представлением содержимого
  • Не удалось запустить устройство Genymotion
  • Давайте будем гением компьютера.