2015-10-04 21 views
1

我有一个相当简单的问题,但这使我烦恼!
我正在尝试构建一个应用程序,其中包含2个DatePickers,periodFrom和periodTo。
基本上我想要做的是让用户在两种情况下选择日期,然后计算日期之间的差异。我已经知道如何获得差异,如何从DatePicker获取日期。问题是我不知道我应该从DatePicker获取值的位置,因为我的onCreate初始化DatePickers的侦听器,但它不会将设置日期存储在全局变量中,仅存储当前日期Calendar.getInstance();Android:DatePicker值保存在一个变量不会进入创建

这是我的MainActivity代码,也许你可以在这个问题上给我启发。谢谢!

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

}

+0

那么你的问题是? – starkshang

+0

在我设定日期之后,我可以在哪里获得日历中的值?这样我可以在我的onCreate中使用这个值。因为onCreate,我只是初始化侦听器,并通过非常快,所以它不会再注册我的变量。我不知道你是否明白我的观点。 –

回答

3

的问题是选择它们之前,你所得到的日期。

只需创建一个按钮(当你点击按钮,然后将差异转换为天的过程完成)。然后点击按钮获取日期的值,然后将其转换为日期。

如果您在下面评论中发现某些问题,请告知我们。

+0

谢谢。这也是我的想法......但我不想添加按钮..无论如何,这种行为是正确的,你应该得纠正这个问题的答案。 –

+1

然后,当您选择periodTo时,您可以做同样的事情,但请确保您选择了periodFrom。或者提出一个条件,如果选择了periodFrom,那么只能找到天。 – Sangeeta

相关问题