Je suis nouveau sur Android Fragments et je veux savoir que je peux montrer ou implémenter DatePicker
en simple Fragment
et non FragmentActivity
.
Par exemple, le nom de ma classe est:
public class FragmentAddCard extends Fragment {
}
Merci.
Dans votre bouton, cliquez sur appeler le DateFragment comme ceci
dob.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
DialogFragment newFragment = new SelectDateFragment();
newFragment.show(getFragmentManager(), "DatePicker");
}
});
Voici l'extrait de code pour DateFragment
public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@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);
}
public void onDateSet(DatePicker view, int yy, int mm, int dd) {
populateSetDate(yy, mm+1, dd);
}
public void populateSetDate(int year, int month, int day) {
dob.setText(month+"/"+day+"/"+year);
}
}
Ceci est un autre exemple:
Calendar cal = Calendar.getInstance(TimeZone.getDefault()); // Get current date
// Create the DatePickerDialog instance
DatePickerDialog datePicker = new DatePickerDialog(this,
R.style.AppBlackTheme, datePickerListener,
cal.get(Calendar.YEAR),
cal.get(Calendar.MONTH),
cal.get(Calendar.DAY_OF_MONTH));
datePicker.setCancelable(false);
datePicker.setTitle("Select the date");
datePicker.show();
// Listener
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) {
String year1 = String.valueOf(selectedYear);
String month1 = String.valueOf(selectedMonth + 1);
String day1 = String.valueOf(selectedDay);
TextView tvDt = (TextView) findViewById(R.id.tvDate);
tvDt.setText(day1 + "/" + month1 + "/" + year1);
}
};
Tout d’abord, je peux dire que la réponse sélectionnée fonctionne bien. C’est une bonne approche. Mais si vous voulez utiliser MaterailDatePicker avec Fragment. J'ai trouvé une solution. Essayez de suivre pour définir DatePicker dans Fragment.
Gradle
dependencies {
compile 'com.wdullaer:materialdatetimepicker:3.1.3'
}
DatePickerFragment
package com.wdullaer.datetimepickerexample;
import Android.app.Fragment;
import Android.graphics.Color;
import Android.os.Bundle;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.Button;
import Android.widget.CheckBox;
import Android.widget.TextView;
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
import Java.util.Calendar;
/**
* A simple {@link Fragment} subclass.
*/
public class DatePickerFragment extends Fragment implements DatePickerDialog.OnDateSetListener {
private TextView dateTextView;
private CheckBox modeDarkDate;
private CheckBox modeCustomAccentDate;
private CheckBox vibrateDate;
private CheckBox dismissDate;
private CheckBox titleDate;
private CheckBox showYearFirst;
private CheckBox showVersion2;
private CheckBox limitSelectableDays;
private CheckBox highlightDays;
public DatePickerFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.datepicker_layout, container, false);
// Find our View instances
dateTextView = (TextView) view.findViewById(R.id.date_textview);
Button dateButton = (Button) view.findViewById(R.id.date_button);
modeDarkDate = (CheckBox) view.findViewById(R.id.mode_dark_date);
modeCustomAccentDate = (CheckBox) view.findViewById(R.id.mode_custom_accent_date);
vibrateDate = (CheckBox) view.findViewById(R.id.vibrate_date);
dismissDate = (CheckBox) view.findViewById(R.id.dismiss_date);
titleDate = (CheckBox) view.findViewById(R.id.title_date);
showYearFirst = (CheckBox) view.findViewById(R.id.show_year_first);
showVersion2 = (CheckBox) view.findViewById(R.id.show_version_2);
limitSelectableDays = (CheckBox) view.findViewById(R.id.limit_dates);
highlightDays = (CheckBox) view.findViewById(R.id.highlight_dates);
// Show a datepicker when the dateButton is clicked
dateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar now = Calendar.getInstance();
DatePickerDialog dpd = DatePickerDialog.newInstance(
DatePickerFragment.this,
now.get(Calendar.YEAR),
now.get(Calendar.MONTH),
now.get(Calendar.DAY_OF_MONTH)
);
dpd.setThemeDark(modeDarkDate.isChecked());
dpd.vibrate(vibrateDate.isChecked());
dpd.dismissOnPause(dismissDate.isChecked());
dpd.showYearPickerFirst(showYearFirst.isChecked());
dpd.setVersion(showVersion2.isChecked() ? DatePickerDialog.Version.VERSION_2 : DatePickerDialog.Version.VERSION_1);
if (modeCustomAccentDate.isChecked()) {
dpd.setAccentColor(Color.parseColor("#9C27B0"));
}
if (titleDate.isChecked()) {
dpd.setTitle("DatePicker Title");
}
if (highlightDays.isChecked()) {
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
date2.add(Calendar.WEEK_OF_MONTH, -1);
Calendar date3 = Calendar.getInstance();
date3.add(Calendar.WEEK_OF_MONTH, 1);
Calendar[] days = {date1, date2, date3};
dpd.setHighlightedDays(days);
}
if (limitSelectableDays.isChecked()) {
Calendar[] days = new Calendar[13];
for (int i = -6; i < 7; i++) {
Calendar day = Calendar.getInstance();
day.add(Calendar.DAY_OF_MONTH, i * 2);
days[i + 6] = day;
}
dpd.setSelectableDays(days);
}
dpd.show(getFragmentManager(), "Datepickerdialog");
}
});
return view;
}
@Override
public void onResume() {
super.onResume();
DatePickerDialog dpd = (DatePickerDialog) getFragmentManager().findFragmentByTag("Datepickerdialog");
if(dpd != null) dpd.setOnDateSetListener(this);
}
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
String date = "You picked the following date: "+dayOfMonth+"/"+(++monthOfYear)+"/"+year;
dateTextView.setText(date);
}
}
button_name.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
DatePickerDialog datePickerDialog = DatePickerDialog.newInstance(new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
String years=""+year;
String months=""+(monthOfYear+1);
String days=""+dayOfMonth;
if(monthOfYear>=0 && monthOfYear<9){
months="0"+(monthOfYear+1);
}
if(dayOfMonth>0 && dayOfMonth<10){
days="0"+dayOfMonth;
}
race_date.setText(months+"/"+days+"/"+years);
}
}, now.get(Calendar.YEAR),
now.get(Calendar.MONTH),
now.get(Calendar.DAY_OF_MONTH));
datePickerDialog.setMinDate(now);
datePickerDialog.show(getActivity().getFragmentManager(), "Datepicker");
break;
}
return false;
}
});