2016-01-04 2 views
0

Здравствуйте, мне нужна помощь.Получение данных из DatePickerDialog в TextView

У меня есть MainActivity, PickerDialogs и DateSettings и я хочу получить дату в EditText из DatePickerDialog. Как я могу это сделать? Огромное спасибо.

Вот классы Java:

DateSettings.java

public class DateSettings implements DatePickerDialog.OnDateSetListener 
{ 

    Context context; 

    public DateSettings(Context context) 
    { 
     this.context = context; 
    } 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
    { 
     Toast.makeText(context, "Selected date: " +monthOfYear+ "/" +dayOfMonth+ "/" +year, Toast.LENGTH_SHORT).show(); 
    } 
} 

PickerDialogs.java

public class PickerDialogs extends DialogFragment 
{ 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) 
    { 
     DateSettings dateSettings = new DateSettings(getActivity()); 

     Calendar calendar = Calendar.getInstance(); 
     int day = calendar.get(Calendar.DAY_OF_MONTH); 
     int month = calendar.get(Calendar.MONTH); 
     int year = calendar.get(Calendar.YEAR); 

     DatePickerDialog date_dialog; 
     date_dialog = new DatePickerDialog(getActivity(), dateSettings, year, month, day); 
     return date_dialog; 
    } 
} 

MainActivity.java

public class MainActivity extends FragmentActivity 
{ 

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


    public void setDate(View view) 
    { 
     PickerDialogs pickerDialogs = new PickerDialogs(); 
     pickerDialogs.show(getSupportFragmentManager(), "date picker?"); 
    } 


    public void setTime(View view) 
    { 
     PickerDialogsTime pickerDialogsTime = new PickerDialogsTime(); 
     pickerDialogsTime.show(getSupportFragmentManager(), "time_picker"); 
    } 
} 

ответ

0

Вашего DialogFragment не имеет метода или интерфейс для возврата отборных дат к абоненту, см ниже кода

Здесь - Внутри конструктора я проходящий OnDateSetListener объект mDateSetListener так, что я могу вернуть результат деятельности

public class DatePickerDialogFragment extends DialogFragment { 

    private Context context; 
    private Calendar MinDate, MaxDate; 
    private OnDateSetListener mDateSetListener; 


    public DatePickerDialogFragment() { 
    } 

    public DatePickerDialogFragment(OnDateSetListener callback, Calendar MinDate, Calendar MaxDate, Context context) { 
     mDateSetListener = callback; 
     this.MinDate = MinDate; 
     this.MaxDate = MaxDate; 
     this.context = context; 
    } 
    public DatePickerDialogFragment(OnDateSetListener callback, Context context) { 
     mDateSetListener = callback; 
     this.context = context; 
    } 
    DatePickerDialog dd; 
    DatePicker dp; 

    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Calendar cal = Calendar.getInstance(); 

     dd = new DatePickerDialog(getActivity(), this.mDateSetListener, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)); 
     dd.setOnShowListener(new DialogInterface.OnShowListener() { 
      @Override 
      public void onShow(DialogInterface dialog) { 
       try { 
        if (MinDate!=null&&MaxDate!=null) { 
         ((DatePickerDialog) dialog).getDatePicker().setMaxDate(MaxDate.getTimeInMillis()); 
         ((DatePickerDialog) dialog).getDatePicker().setMinDate(MinDate.getTimeInMillis()); 

        } 
       } catch (NullPointerException e) { 
        dialog.dismiss(); 
        e.printStackTrace(); 
       } 
      } 
     }); 
     getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
     return dd; 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
    } 

} 

А когда вы создаете DialogFragmen, сделать это как:

Update Используйте эту внутреннюю активность фрагмента, где вы хотите DatePicker вернуть значение, Обратите внимание, что вы получите значение даты внутри onDateSet функции

dialogFragment = new DatePickerDialogFragment(new DatePickerDialog.OnDateSetListener() { 
      @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
       Calendar cal = GregorianCalendar.getInstance(); 
       cal.set(year, monthOfYear, dayOfMonth); 
       String currentDateandTime = sdf.format(cal.getTime()); 
       et_date.setText(currentDateandTime); 
      } 
     }, context); 

Так что выбрали дату возвращается к методу обратного вызова и установить в TextViewet_date

Покажите, когда это необходимо, как

dialogFragment.show(getFragmentManager(), "Date"); 
+0

Где метод, который возвращает значение и как я помещаю это в свой код? –

+0

Просмотреть мое обновление @ Lukáš Kulla – insomniac