3

すべてのドキュメントと例は、「datepicker ダイアログから選択した日付をアクティビティに戻す方法」に関連しているようです。そして、それらのほとんどすべてが、datepicker ダイアログで現在の日付をデフォルトの日付として設定します。ただし、日付ピッカーが開いたときに、現在の日付ではなくその日付が表示されるように、特定の日付を渡すにはどうすればよいですか?

私が直面している問題は、ユーザーがボタンをクリックして日付ピッカーのダイアログが初めて開いたときに、現在の時刻が表示されることです。

ユーザーが値を変更し、完了をクリックします。

ボタンをもう一度クリックすると、datepicker ダイアログが開きます。ただし、変更された日付ではなく、値はデフォルトの日付のままです!!

コード:

public class DatePickerFragment extends SherlockDialogFragment
        implements android.app.DatePickerDialog.OnDateSetListener{
    
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        //TODO Use current date is date null, else show currently displayed date
        
        // 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 monthOfYear,
            int dayOfMonth) {
        ((NewTransactionActivity) getActivity()).updateDate(year, monthOfYear, dayOfMonth);
        
    }

}

上記のコードは、日付ピッカーが常にデフォルトの日付で表示される理由です。ただし、このフラグメントに日付値を渡すにはどうすればよいですか?

これはアクティビティのコードです:

public void showDatePickerDialog(View v) {
    Bundle currentDate = new Bundle();
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");
}
4

3 に答える 3

5
       //Get the date on the button now
        Date buttonDate = SimpleDateFormat.getDateInstance().parse(mDate.getText().toString());

        //Create a bundle to pass the date
        Bundle currentDate = new Bundle();
        currentDate.putLong("setDate", buttonDate.getTime());

        //Pass the bundle to the fragment
        DialogFragment newFragment = new DatePickerFragment();
        newFragment.setArguments(currentDate);
        newFragment.show(getSupportFragmentManager(), "datePicker");

そして今、フラグメントでこれを行います:

    //Read the passed bundle from the activity
Bundle setDate = this.getArguments();
Long currDate = setDate.getLong("setDate");

// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
c.setTimeInMillis(currDate);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
于 2013-05-17T08:16:24.103 に答える
4

次の 2 つが必要です。

1) 入力パラメーター (または DataPickerFragment へのパラメーター) を渡します。

Bundle args = new Bundle();
args.putInt("someInt", someInt);
args.putString("someString", someString);
// Put any other arguments
myFragment.setArguments(args);

2) ダイアログの日付を設定する (月は 0 から始まり、11 で終わることに注意してください)

ダイアログを使用して実行した例を次に示します。

private void showEditDatePopup()
{
    String dateString = mBirthDate.getText().toString();
    java.util.Date inputDate  = null;
    Calendar newCalendar = Calendar.getInstance();
    if (dateString.length() > 0)
    {
        try
        {
            inputDate = DateFormat.getDateInstance(DateFormat.MEDIUM).parse(dateString);
            newCalendar = Calendar.getInstance();
            newCalendar.setTime(inputDate);
        } catch (Exception e)
        {
            newCalendar = Calendar.getInstance();
            newCalendar.setTime(inputDate);
        }
    }


    DatePickerDialog dateDialog = new DatePickerDialog(this, new OnDateSetListener() {

        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            Calendar newDate = Calendar.getInstance();
            newDate.set(year, monthOfYear, dayOfMonth);
            mBirthDate.setText(DateFormat.getDateInstance(DateFormat.MEDIUM).format(newDate.getTime()));
        }

    },newCalendar.get(Calendar.YEAR)
     ,newCalendar.get(Calendar.MONTH)
     ,newCalendar.get(Calendar.DAY_OF_MONTH));

    dateDialog.show();
}
于 2013-05-16T22:45:04.683 に答える
0

これは私にとってはうまくいきました

MainActivity で:

Calendar yourDate = Calendar.getInstance();
    
 public void showDatePickerDialog(View v) {
             DialogFragment newFragment = new DatePickerFragment();
             Bundle args = new Bundle();
             args.putInt("year", yourDate.get(Calendar.YEAR));
             args.putInt("month", yourDate.get(Calendar.MONTH));
             args.putInt("day",yourDate.get(Calendar.DAY_OF_MONTH));
             newFragment.setArguments(args);
             newFragment.show(getSupportFragmentManager(), "datePicker");
         }

DatePickerFragment:

 @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        Bundle bundle = this.getArguments();
        int year = bundle.getInt ("year");
        int month = bundle.getInt("month");
        int day = bundle.getInt("day");
        listener = (OnFragmentInteractionListener) getActivity();
        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }
于 2021-01-11T18:01:06.047 に答える