Android:保存在变量中的日期选择器值不';I don’我不进去了

Android:保存在变量中的日期选择器值不';I don’我不进去了,android,android-studio,datepicker,Android,Android Studio,Datepicker,我有一个相当简单的问题,但这是烦我了 我正在尝试构建一个应用程序,其中我有两个日期选择器,periodFrom和periodTo。 基本上,我要做的是让用户选择两种情况下的日期,然后计算日期之间的差值(以天为单位)。我已经知道如何获得差异,如何从日期选择器获得日期。问题是我不知道应该从哪里获取日期选择器的值,因为onCreate初始化了日期选择器的侦听器,但它不将设置的日期存储在全局变量中,只存储它从Calendar.getInstance()获取的当前日期 这是我的主要活动代码,也许你可以在我

我有一个相当简单的问题,但这是烦我了
我正在尝试构建一个应用程序,其中我有两个日期选择器,periodFrom和periodTo。
基本上,我要做的是让用户选择两种情况下的日期,然后计算日期之间的差值(以天为单位)。我已经知道如何获得差异,如何从日期选择器获得日期。问题是我不知道应该从哪里获取日期选择器的值,因为onCreate初始化了日期选择器的侦听器,但它不将设置的日期存储在全局变量中,只存储它从
Calendar.getInstance()获取的当前日期

这是我的主要活动代码,也许你可以在我遇到的这个问题上给我一些启发。谢谢大家!

MainActivity.class

package com.endtech.utilitycalculator;

import android.app.DatePickerDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {

private EditText periodFrom, periodTo;
private Calendar mCalendarFrom = Calendar.getInstance();
private Calendar mCalendarTo = Calendar.getInstance();
private long from, to;

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

    periodFrom = (EditText) findViewById(R.id.periodFrom);
    periodTo = (EditText) findViewById(R.id.periodTo);

    initListeners();
    from = mCalendarFrom.getTimeInMillis(); //This is current time, not the set time
    to = mCalendarTo.getTimeInMillis(); //This is current time, not the set time
}

private void initListeners() {
    setDateFrom();
    setDateTo();
}

private void setDateFrom() {
    final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            mCalendarFrom.set(Calendar.YEAR, year);
            mCalendarFrom.set(Calendar.MONTH, monthOfYear);
            mCalendarFrom.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            updateLabelFrom();
        }
    };

    periodFrom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new DatePickerDialog(MainActivity.this, date, mCalendarFrom.get(Calendar.YEAR),
                    mCalendarFrom.get(Calendar.MONTH), mCalendarFrom.get(Calendar.DAY_OF_MONTH)).show();
        }
    });
}

private void updateLabelFrom() {
    String mFormat = "dd/MM/yyyy";
    SimpleDateFormat sdf = new SimpleDateFormat(mFormat, Locale.GERMANY);

    periodFrom.setText(sdf.format(mCalendarFrom.getTime()));
}

private void setDateTo() {
    final DatePickerDialog.OnDateSetListener date2 = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            mCalendarTo.set(Calendar.YEAR, year);
            mCalendarTo.set(Calendar.MONTH, monthOfYear);
            mCalendarTo.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            updateLabelTo();
        }
    };

    periodTo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new DatePickerDialog(MainActivity.this, date2, mCalendarTo.get(Calendar.YEAR),
                    mCalendarTo.get(Calendar.MONTH), mCalendarTo.get(Calendar.DAY_OF_MONTH)).show();
        }
    });
}

private void updateLabelTo() {
    String mFormat = "dd/MM/yyyy";
    SimpleDateFormat sdf = new SimpleDateFormat(mFormat, Locale.GERMANY);

    periodTo.setText(sdf.format(mCalendarTo.getTime()));
}

}

问题是,在选择日期之前,您要先获取日期

只需创建一个按钮(当您单击该按钮时,即可完成将差异转换为天数的过程)。然后单击按钮获取日期值,然后将其转换为天


如果您在下面的评论中发现一些问题,请告诉我。

那么您的问题是?设置日期后,从日历中可以从哪里获取值?这样我就可以在onCreate中使用该值。因为onCreate我只是初始化监听器,并以非常快的速度通过,所以它不会再次注册我的变量。我不知道你是否明白我的意思,谢谢。这也是我所想的。。。但我不想添加按钮。。无论如何,这种行为是正确的,你应该正确回答这个问题。然后你可以在选择periodTo时做同样的事情,但要确保你选择了periodFrom。或者设置一个条件,如果选择periodFrom,则只查找天。