2015-10-04 51 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

相關問題