私はAndroid Fragmentsに新しいので、DatePicker
ではなく、単純なFragment
でFragmentActivity
を表示または実装する方法を知りたいです。
たとえば、私のクラス名は次のとおりです。
public class FragmentAddCard extends Fragment {
}
ありがとう。
ボタンをクリックして、DateFragmentを次のように呼び出します
dob.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
DialogFragment newFragment = new SelectDateFragment();
newFragment.show(getFragmentManager(), "DatePicker");
}
});
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);
}
}
これは他の例です:
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);
}
};
まず第一に、選択された答えはうまく機能しています。それは良いアプローチです。ただし、フラグメントで MaterailDatePicker を使用する場合。私は解決策を見つけました。 FragmentでSet DatePickerをフォローしてみてください。
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;
}
});