如何实现多个日期选择器的功能有两个按钮和保存采摘这些日期?日期、多个、如何实现、按钮

2023-09-12 22:14:18 作者:|┌ 覻峩嗎 '﹖

我要创造,我想有两个按钮和多个标签的活动。用户可以点击按钮,从和选择日期。而选择的日期,可以在标签显示,这样用户可以知道哪些日期,已经采摘用户。

任何人都可以指导我怎样才能做到这一点。

在使用多个日期选择器功能,只有两个日期选择器上的两个按钮。 如何保存这些日期。所以每当用户离开这个活动,并再次访问,他可能知道。 解决方案

我已经创建 DatePickerFragment 辅助类,有了这个,你可以选择只用单一的DatePickerFragment任何数量的日期类。

 公共类DatePickerFragment扩展DialogFragment实现DatePickerDialog.OnDateSetListener {

    / **
     *用于指示用户的回调接口完成填写日期(他们点击了设置按钮)。
     * /
    公共接口OnDateSetListener {

        / **
         *参数对话框,这个监听相关的观点。
         *参数年成立的年份。
         *参数被设置monthOfYear的monthOfYear。
         *参数被设置DAYOFMONTH的DAYOFMONTH。
         * /
        无效onDateSet(DatePicker的对话,诠释一年,诠释monthOfYear,诠释DAYOFMONTH,INT REQ code);
    }

    私人OnDateSetListener mListener;
    私人诠释REQ code;
    公共无效setOnDateSetListener(OnDateSetListener mListener,INT REQ code){
        this.mListener = mListener;
        this.req code = REQ code;
    }

    @覆盖
    公共对话onCreateDialog(包savedInstanceState){

        INT年;
        INT个月;
        INT天;
        最后的日历C = Calendar.getInstance();
        捆绑包= this.getArguments();
        如果(捆绑!= NULL){
            //使用给定的日期作为选择器的默认日期
            年= bundle.getInt(年);
            月= bundle.getInt(月);
            天= bundle.getInt(DAY);
        }其他{
            //使用当前日期作为选择器的默认日期
            年= c.get(Calendar.YEAR);
            月= c.get(Calendar.MONTH);
            天= c.get(Calendar.DAY_OF_MONTH);
        }

        //创建DatePickerDialog的新实例,并将其返回
        返回新DatePickerDialog(getActivity(),这,年,月,日);
    }

    @覆盖
    公共无效onDateSet(DatePicker的观点,年整型,诠释monthOfYear,诠释DAYOFMONTH){
        如果(mListener!= NULL)
            mListener.onDateSet(查看,一年,monthOfYear,DAYOFMONTH,REQ code);
        this.dismiss();
    }
}
 

使用它的活动或片段

 公共类MainActivity扩展FragmentActivity实现DatePickerFragment.OnDateSetListener {
    私有静态最终诠释FROM_DATE_TAG = 2404;
    私有静态最终诠释TO_DATE_TAG = 2405;

    @覆盖
    公共无效的onClick(视图查看){
        FragmentManager fragmentManager = getSupportFragmentManager();
        DatePickerFragment片段;
        开关(view.getId()){
        案例R.id.fromDate:
            片段=新DatePickerFragment();
            fragment.setOnDateSetListener(这一点,FROM_DATE_TAG);
            fragment.show(fragmentManager,日期选取器);
            打破;
        案例R.id.toDate:
            片段=新DatePickerFragment();
            fragment.setOnDateSetListener(这一点,TO_DATE_TAG);
            fragment.show(fragmentManager,日期选取器);
            打破;
        }
    }

    //如果要更新alredy选定的日期,在budle指定。 DatePickerFragment将采取指定包日期为默认日期。
    私人无效updateDate(){
        //获取最新存储在共享prefrence
        字符串TODATE =共享prefrenceUtils.getString(mContext,FROM_DATE);
        SimpleDateFormat的SDF =新的SimpleDateFormat(MMM DD,YYYY,Locale.getDefault());
        数据解析= sdf.parse(TODATE);
        日历C = Calendar.getInstance();
        c.setTime(解析);
        FragmentManager fragmentManager = this.getActivity()getSupportFragmentManager()。
        DatePickerFragment片段=新DatePickerFragment();
        束束=新包();
        bundle.putInt(年,c.get(Calendar.YEAR));
        bundle.putInt(月,c.get(Calendar.MONTH));
        bundle.putInt(日,c.get(Calendar.DATE));
        fragment.setArguments(包);
        fragment.setOnDateSetListener(这一点,FROM_DATE_TAG);
        fragment.show(fragmentManager,日期选取器);
    }

    @覆盖
    公共无效onDateSet(DatePicker的对话,诠释一年,诠释monthOfYear,诠释DAYOFMONTH,INT REQ code){
        如果(REQ code == FROM_DATE_TAG){
            日历myCalendar = Calendar.getInstance();
            myCalendar.set(年,monthOfYear,DAYOFMONTH);
            SimpleDateFormat的格式化=新的SimpleDateFormat(MMM DD,YYYY,Locale.getDefault());
            串dateString = formatter.format(myCalendar.getTime());
            Log.i(起始日期,日期:+ dateString); //结果= DATE:5月24日,2015年
            共享prefrence //商店FROM_DATE
            共享prefrenceUtils.putString(mContext,FROM_DATE,dateString);
        }否则,如果(REQ code == TO_DATE_TAG){
            日历myCalendar = Calendar.getInstance();
            myCalendar.set(年,monthOfYear,DAYOFMONTH);
            SimpleDateFormat的格式化=新的SimpleDateFormat(MMM DD,YYYY,Locale.getDefault());
            串dateString = formatter.format(myCalendar.getTime());
            Log.i(最新,日期:+ dateString); //结果= DATE:5月25日,2015年
            共享prefrence //商店TO_DATE
            共享prefrenceUtils.putString(mContext,TO_DATE,dateString);
        }
    }
}
 

请参照How在片段显示共享preference存储的数据?中的共享prefrenceUtils 类。

EXCEL日期选择器自动填上日期

I want to create an activity in which I want to have two button and multiple label. a user can click on buttons to select dates from and to. while those selected dates can be shown in label so that user might know which dates already picked by user.

Can anybody guide me how can I do this.

using multiple date-picker functionality with only two date pickers on two buttons. how can I save those dates. so whenever user leave this activity and visit again he might know.

解决方案

I have created DatePickerFragment helper class, With this you can select any number of date with just single DatePickerFragment class.

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    /**
     * The callback interface used to indicate the user is done filling in the date (they clicked on the 'Set' button).
     */
    public interface OnDateSetListener {

        /**
         * @param dialog The view associated with this listener.
         * @param year The year that was set.
         * @param monthOfYear The monthOfYear that was set.
         * @param dayOfMonth The dayOfMonth that was set.
         */
        void onDateSet(DatePicker dialog, int year, int monthOfYear, int dayOfMonth, int reqCode);
    }

    private OnDateSetListener mListener;
    private int reqCode;
    public void setOnDateSetListener(OnDateSetListener mListener, int reqCode){
        this.mListener  = mListener;
        this.reqCode = reqCode;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        int year;
        int month;
        int day;
        final Calendar c = Calendar.getInstance();
        Bundle bundle = this.getArguments();
        if(bundle!=null) {
            // Use the given date as the default date in the picker
            year = bundle.getInt("YEAR");
            month = bundle.getInt("MONTH");
            day = bundle.getInt("DAY");
        }else{
            // Use the current date as the default date in the picker
            year = c.get(Calendar.YEAR);
            month = c.get(Calendar.MONTH);
            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) {
        if(mListener!=null)
            mListener.onDateSet(view, year, monthOfYear, dayOfMonth, reqCode);
        this.dismiss();
    }
}

Use it in Activity or Fragment

public class MainActivity extends FragmentActivity implements DatePickerFragment.OnDateSetListener {
    private static final int FROM_DATE_TAG = 2404;
    private static final int TO_DATE_TAG = 2405;

    @Override
    public void onClick(View view) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        DatePickerFragment fragment;
        switch(view.getId()){
        case R.id.fromDate:
            fragment = new DatePickerFragment();
            fragment.setOnDateSetListener(this, FROM_DATE_TAG);
            fragment.show(fragmentManager, "Date Picker");
            break;
        case R.id.toDate:
            fragment = new DatePickerFragment();
            fragment.setOnDateSetListener(this, TO_DATE_TAG);
            fragment.show(fragmentManager, "Date Picker");
            break;
        }
    }

    //If you want to update the alredy selected date, Specify it in budle. DatePickerFragment will take specified bundle date as default date.
    private void updateDate() {
        //get to date stored in SharedPrefrence
        String toDate = SharedPrefrenceUtils.getString(mContext, "FROM_DATE");
        SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy", Locale.getDefault());
        Date parse = sdf.parse(toDate);
        Calendar c = Calendar.getInstance();
        c.setTime(parse);
        FragmentManager fragmentManager = this.getActivity().getSupportFragmentManager();
        DatePickerFragment fragment = new DatePickerFragment();
        Bundle bundle = new Bundle();
        bundle.putInt("YEAR", c.get(Calendar.YEAR));
        bundle.putInt("MONTH", c.get(Calendar.MONTH));
        bundle.putInt("DAY", c.get(Calendar.DATE));
        fragment.setArguments(bundle);
        fragment.setOnDateSetListener(this, FROM_DATE_TAG);
        fragment.show(fragmentManager, "Date Picker");
    }

    @Override
    public void onDateSet(DatePicker dialog, int year, int monthOfYear, int dayOfMonth, int reqCode) {
        if(reqCode == FROM_DATE_TAG){
            Calendar myCalendar  = Calendar.getInstance();
            myCalendar.set(year, monthOfYear, dayOfMonth);
            SimpleDateFormat formatter = new SimpleDateFormat("MMM dd, yyyy", Locale.getDefault());
            String dateString = formatter.format(myCalendar.getTime());
            Log.i("From Date","DATE:"+dateString);//"Result = DATE:May 24, 2015"
            //Store FROM_DATE in SharedPrefrence
            SharedPrefrenceUtils.putString(mContext,"FROM_DATE", dateString);
        } else if(reqCode == TO_DATE_TAG){
            Calendar myCalendar  = Calendar.getInstance();
            myCalendar.set(year, monthOfYear, dayOfMonth);
            SimpleDateFormat formatter = new SimpleDateFormat("MMM dd, yyyy", Locale.getDefault());
            String dateString = formatter.format(myCalendar.getTime());
            Log.i("To Date","DATE:"+dateString);//"Result = DATE:May 25, 2015"
            //Store TO_DATE in SharedPrefrence
            SharedPrefrenceUtils.putString(mContext,"TO_DATE", dateString);
        }
    }
}

Refer How to display SharedPreference stored data in Fragment? for SharedPrefrenceUtils Class.