web-dev-qa-db-ja.com

Android:DatePickerおよびDatePickerダイアログ

オプションメニューにこのコードがあります

Dialog dialog = new Dialog(ScheduleActivity.this);
dialog.setTitle("Add Event");
dialog.setContentView(R.layout.add_even_on);
Button datePicker = (Button) dialog.findViewById(R.id.datePicker);
final DialogFragment dateFrag = new MyDatePicker();
    datePicker.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                dateFrag.show(getSupportFragmentManager(), "datePicker");               
            }
        });
dialog.show();

オプションメニューの[イベントの追加]をクリックすると、ダイアログが表示され、ボタンがDatePickerDialogと表示され、その横にTextViewが選択された日付を反映します。 DatePickerDialogでは、DatePickerDialogの使用方法についてAndroids Developerから取得したクラスを次に示します。

class MyDatePicker extends DialogFragment implements DatePickerDialog.OnDateSetListener {
 int pYear;
 int pDay;
 int pMonth;

@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);
  }

  public void onDateSet(DatePicker view, int year, int month, int day) {
    pYear = year;
    pDay = day;
    pMonth = month;
  }
}

だから私の問題は、DatePickerDialogで[設定]をクリックしたときに値をミリ秒で取得し、DatePickerDialogを自動的に閉じて、DatePickerDialogを開くボタンと日付を反映するTextviewを含むダイアログに戻る方法です。 DatePickerDialogを選択しました... DatePickerDialog内で選択したものを表示しません...

これが私が何を意味するかの写真です、

したがって、[日付の選択]ボタンをクリックすると、次の図に示すように、DatePickerDialogボックスが表示されます enter image description here

enter image description here

そして、私が設定をクリックすると、そのDatePickerDialogからのミリ秒単位の値を考慮に入れたかった

10
lemoncodes

ここでは、いくつかのコードを提供します。

public class NewReminder extends Activity {
private static final int DATE_DIALOG_ID = 1;
private int year;
private int month;
private int day;
EditText editTextDate;
private String currentDate;
private Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.addnewreminder);
    initialize();
    context = getApplicationContext();
    OnClickListener listenerDate = new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            final Calendar c = Calendar.getInstance();
            year = c.get(Calendar.YEAR);
            month = c.get(Calendar.MONTH);
            day = c.get(Calendar.DAY_OF_MONTH);
            showDialog(DATE_DIALOG_ID);
        }
    };
    editTextDate.setOnClickListener(listenerDate);

}

private void initialize() {
    // TODO Auto-generated method stub

    editTextDate = (EditText) findViewById(R.id.editTextDate);

}


private void updateDisplay() {
    currentDate = new StringBuilder().append(day).append(".")
            .append(month + 1).append(".").append(year).toString();

    Log.i("DATE", currentDate);
}

OnDateSetListener myDateSetListener = new OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker datePicker, int i, int j, int k) {

        year = i;
        month = j;
        day = k;
        updateDisplay();
        editTextDate.setText(currentDate);
    }
};



@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this, myDateSetListener, year, month,
                day);
    }
    return null;
}
}
12
januprasad

古いダイアログは廃止されました。フラグメントを実装します。

アクティビティをフラグメントアクティビティに移行します。

public class YourActivity extends FragmentActivity 

フラグメントの作成ダイアログ:

public class TimePickerFragment extends DialogFragment {

    private OnDateSetListener listener;

    public TimePickerFragment(OnDateSetListener listener) {
        this.listener=listener;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current time as the default values for 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 TimePickerDialog and return it
        return new DatePickerDialog(getActivity(), listener, year,month,day);
    }

}

実装インターフェース(パッケージ:import Android.app.DatePickerDialog.OnDateSetListener):

public class YourActivity extends FragmentActivity implements OnDateSetListener{

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {

    }

}

ShowDialog関数を追加します。

public class YourActivity extends FragmentActivity implements OnDateSetListener{

    showDateDialog(){

        FragmentManager fm = getSupportFragmentManager();
        TimePickerFragment newFragment = new TimePickerFragment(this);
        newFragment.show(fm, "date_picker");

    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {

    }

}
14
Hpsaturn

XMLにTextViewとボタンを追加します

<TextView
    Android:id="@+id/searchText"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="TextView" />

<Button
    Android:id="@+id/search"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Search" />

Javaファイルに次のコードを追加します

public class DatePickerDialogExample extends Activity {

    TextView txtDate;
    private int mYear, mMonth, mDay, mHour, mMinute;

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


        txtDate = (TextView) findViewById(R.id.searchText);
        Button search = (Button) findViewById(R.id.search);
        search.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // Process to get Current Date
            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);

            // Launch Date Picker Dialog
            DatePickerDialog dpd = new DatePickerDialog(PrayTimeActivity.this,
                    new DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                int monthOfYear, int dayOfMonth) {
                            // Display Selected date in textbox
                            txtDate.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);

                        }
                    }, mYear, mMonth, mDay);
                dpd.show();
            }
        });


    }

}
4
Salim

間違いなく機能するこのコードを試してください:

            final Calendar c = Calendar.getInstance();
            mYear = c.get(Calendar.YEAR);
            mMonth = c.get(Calendar.MONTH);
            mDay = c.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog dpd = new DatePickerDialog(getActivity(),
                    new DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                int monthOfYear, int dayOfMonth) {

                            birth_Date.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);
                        }
                    }, mYear, mMonth, mDay);
            dpd.show();
1

これは、コンテキストとTextViewをパラメーターとして取得し、ユーザーが日付を選択すると、そのテキストビューにDateを設定する私のヘルパー関数です。

        public static void showDate(final Context context, final TextView textView) {

    if (textView != null) {
        final Calendar myCalendar = Calendar.getInstance();
        DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                // TODO Auto-generated method stub
                myCalendar.set(Calendar.YEAR, year);
                myCalendar.set(Calendar.MONTH, monthOfYear);
                myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                String myFormat = "MM/dd/yy"; // In which you need put here
                SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
                //UIHelper.showLongToastInCenter(context, sdf.format(myCalendar.getTime()));
                textView.setText(sdf.format(myCalendar.getTime()));
            }

        };
        new DatePickerDialog(context, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();
    } else {
        UIHelper.showLongToastInCenter(context, "Unable to show Date picker");
    }
}
1
Faraz Ahmed

あなたはこのコードを試すことができます。それは確かにあなたに役立つでしょう..疑いなし!

    protected Dialog onCreateDialog(int id) {

    Calendar c=Calendar.getInstance();
    int Sysday=c.get(Calendar.DAY_OF_MONTH);
    int Sysmonth=c.get(Calendar.MONTH);
    int Sysyear=c.get(Calendar.YEAR);

    int Sysmin=c.get(Calendar.MINUTE);
    int Syshour=c.get(Calendar.HOUR);


    switch (id) {
    case TIME_DIALOG:

        return new TimePickerDialog(this, myTimePicker , Syshour, Sysmin, false);

    case DATE_DIALOG:
        return new DatePickerDialog(this, myDatePicker, Sysyear, Sysmonth, Sysday);
    }
    return null;
}
1
Abhishek Patil

Koltinでこのように使用します

DatePickerDialog(this as Activity, DatePickerDialog.OnDateSetListener { p0, y, m, _ -> func.invoke(y, m + 1) }, c.get(Calendar.YEAR),
        c.get(Calendar.MONTH),
        c.get(Calendar.DAY_OF_MONTH))
        .show()

どこからでも使える

tvDateFrom.click {
        showDatePicker(c) { y, m ->
            Utils.debugger("DATE FROM ", " y + $y m $m")
            tvDateFrom.text = "$m-$y".toDate()
        }
    }
0
Aklesh Singh
Calendar c1 = Calendar.getInstance();    
int year = c1.get(Calendar.YEAR);
int month = c1.get(Calendar.MONTH);
int day = c1.get(Calendar.DAY_OF_MONTH);
DatePickerDialog.OnDateSetListener myDateListener  = new DatePickerDialog.OnDateSetListener() {

       public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
                   if(arg0.isShown()){

                                     //do further code here

                              }
                            }

                          };
        DatePickerDialog dp = new DatePickerDialog(YourActivity.this, myDateListener, year, month, day);
        dp.show();      
0
Karan Datwani