簡體   English   中英

Android日期選擇器片段無法設置為自定義日期

[英]Android Date Picker Fragment can not be set to Custom date

在此處的“圖像按鈕”上的“ onClickListner”中,我的自定義“ DatePickerFragment”正在顯示以選擇日期。 下面是代碼

DatePickerFragment.java

import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
import android.widget.DatePicker;

import java.util.Calendar;

/**
 * Created by Admin on 9/4/18.
 */
public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    private onDatePickerListener mListener;
    private boolean future;

    public DatePickerFragment(){

    }

//    public DatePickerFragment(boolean future){
//        this.future=future;
//    }

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

        Log.d("DATE_PICKER", " CURRENT_MONTH " + month);

        int day = c.get(Calendar.DAY_OF_MONTH);
        DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), R.style.AppBaseTheme,this, year, month, day);

        if(isFuture() ==false){
            datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
        }
        // Create a new instance of DatePickerDialog and return it
        return datePickerDialog;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
        callListener(year, month, day);
    }

    public DialogFragment setCallbackListener(onDatePickerListener listener) {
        mListener = listener;
        return null;
    }

    private void callListener(int year, int month, int day) {
        if (mListener != null) mListener.onDataSet(year, month, day);
    }

    public boolean isFuture() {
        return future;
    }

    public void setFuture(boolean future) {
        this.future = future;
    }

    public interface onDatePickerListener {
        void onDataSet(int year, int month, int day);
    }
}

然后,當我從“ DatePickerFragment”中單擊“確定”按鈕時,在我的“ MainActivity”中將此“片段”設置為“ EditText”。

MainActivity.java

import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.format.Time;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import com.sample.DatePickerFragment;

public class AddInterestedKarmaActivity extends AppCompatActivity {   

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

        ButterKnife.bind(this);
        context = this;

        EditText dateEdittext = (Edittext)findViewById(R.id.date_edit);
        setDate(dateEditText);

    }    

    private void setDate(final EditText dateEditText){

            datePickerFragment.setCallbackListener(new DatePickerFragment.onDatePickerListener() {
                @Override
                public void onDataSet(int year, int month, int day) {

                    int currentMonth = 0;

                    if (month == 0) {
                        currentMonth = 1;
                    } else if (month == 1) {
                        currentMonth = 2;
                    } else if (month == 2) {
                        currentMonth = 3;
                    } else if (month == 3) {
                        currentMonth = 4;
                    } else if (month == 4) {
                        currentMonth = 5;
                    } else if (month == 5) {
                        currentMonth = 6;
                    } else if (month == 6) {
                        currentMonth = 7;
                    } else if (month == 7) {
                        currentMonth = 8;
                    } else if (month == 8) {
                        currentMonth = 9;
                    } else if (month == 9) {
                        currentMonth = 10;
                    } else if (month == 10) {
                        currentMonth = 11;
                    } else if (month == 11) {
                        currentMonth = 12;
                    } else if (month == 12) {

                    }

                    dateEditText.setText(day + "/" + currentMonth + "/" + year);

                }
            });

        }

        DialogFragment datePicker = datePickerFragment;

        datePicker.show(getSupportFragmentManager(), "datePicker");
    }

    private void setTime(final EditText timeEditText){

        final Calendar c = Calendar.getInstance();
        mHour = c.get(Calendar.HOUR_OF_DAY);
        mMinute = c.get(Calendar.MINUTE);

        TimePickerDialog timePickerDialog = new TimePickerDialog(context,
                new TimePickerDialog.OnTimeSetListener() {

                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay,
                                          int minute) {

                        String curTime = String.format("%02d:%02d", hourOfDay, minute);
                        timeEditText.setText(curTime);
                    }
                }, mHour, mMinute, false);

        timePickerDialog.show();
    }
}

我需要將“ DatePickerFragmenet”的日期設置為自定義日期(不是今天)。 例如將'DatePickerFragment'onCreate()設置為上述來自'dateEditText'的最終int,m,d值。 而且我還需要將自定義“時間”設置為“ TimePickerDialog”,例如“ DatePickerFragment”。

DatePickerDialog有一個函數可以設置自定義日期( updateDate(year_, month_, day_)

根據您的代碼,您需要在DatePickerFragmentonCreateDialogDatePickerFragment中進行更改,從日歷中獲取datemonthyear ,而不是從Calendar中獲取提供自定義日期。

更新的課程如下

public class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    private onDatePickerListener mListener;
    private boolean future;
    int day_;
    int month_;
    int year_;
    private DatePickerDialog datePickerDialog;


    public DatePickerFragment() {

    }


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

        //    Log.d("DATE_PICKER", " CURRENT_MONTH " + month);

        //   int day = c.get(Calendar.DAY_OF_MONTH);
        datePickerDialog = new DatePickerDialog(getActivity(), R.style.AppTheme, this, year_, month_, day_);

        if (isFuture() == false) {
            datePickerDialog.getDatePicker().setMaxDate(System.currentTimeMillis());
        }
      //  datePickerDialog.updateDate(year_, month_, day_);

        // Create a new instance of DatePickerDialog and return it
        return datePickerDialog;
    }


    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
        callListener(year, month, day);
    }

    public DialogFragment setCallbackListener(onDatePickerListener listener) {
        mListener = listener;
        return null;
    }

    private void callListener(int year, int month, int day) {
        if (mListener != null) mListener.onDataSet(year, month, day);
    }

    public boolean isFuture() {
        return future;
    }

    public void setFuture(boolean future) {
        this.future = future;
    }

    public interface onDatePickerListener {
        void onDataSet(int year, int month, int day);
    }
}

在您的活動中,您需要提供自定義日期。 更新的活動如下,您可以添加自定義日期。

public class AddInterestedKarmaActivity extends AppCompatActivity {

    DatePickerFragment datePickerDialog;
    EditText dateEdittext;
    String customDate = "12/12/2007"; //dd/mm/yy

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


        dateEdittext = (EditText) findViewById(R.id.date_edit);
        //  setDate(dateEditText);


        datePickerDialog = new DatePickerFragment();
        datePickerDialog.day_ = getDay();
        datePickerDialog.month_ = getMonth();
        datePickerDialog.year_ = getYear();

        datePickerDialog.setCallbackListener(new DatePickerFragment.onDatePickerListener() {
                                                 @Override
                                                 public void onDataSet(int year, int month, int day) {
                                                     month = month + 1;
                                                     dateEdittext.setText(day + "/" + month + "/" + year);

                                                 }
                                             }
        );

        datePickerDialog.show(getSupportFragmentManager(), "datePicker");

    }

    private int getYear() {
        return Integer.parseInt(changeDateFormat(customDate, "MM/dd/yyyy", "YYYY"));

    }

    private int getMonth() {
        return Integer.parseInt(changeDateFormat(customDate, "MM/dd/yyyy", "MM")) - 1;  //substract one from month because month gets start from 0 in Calendar.

    }

    private int getDay() {
        return Integer.parseInt(changeDateFormat(customDate, "MM/dd/yyyy", "dd"));
    }


    public String changeDateFormat(String dateString, String sourceDateFormat, String targetDateFormat) {
        if (dateString == null || dateString.isEmpty())
            return "";

        SimpleDateFormat inputDateFromat = new SimpleDateFormat(sourceDateFormat, Locale.US);
        Date date = new Date();

        try {
            date = inputDateFromat.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        SimpleDateFormat outputDateFormat = new SimpleDateFormat(targetDateFormat, Locale.US);

        return outputDateFormat.format(date);
    }


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM