Come Utilizzare il DatePicker in AndroidStudio
Il DatePicker permette di scegliere una data costituita da giorno, mese e anno. In questo post spieghero’ come creare un datepicker dialog.
Creeremo un’app che, una volta scelta una data, ci dirà quanti millisecondi, secondi, minuti, ore, giorni, mesi ed anni sono passati dalla data in questione.
Per farlo utilizzeremo una libreria esterna chiamata joda-time, molto utile per lavorare con le date.
Il layout per la nostra app sarà molto semplice, utilizzeremo un pulsante e una TextView. Quando il pulsante verrà premuto, l’utente potrà scegliere una data, e una volta fatto ciò setteremo la nostra textView con i giorni passati dalla data scelta.
Layout
1<?xml version="1.0" encoding="utf-8"?>
2<RelativeLayout
3xmlns:android="http://schemas.android.com/apk/res/android"
4xmlns:tools="http://schemas.android.com/tools"
5android:layout_width="match_parent"
6android:layout_height="match_parent"
7android:paddingBottom="@dimen/activity_vertical_margin"
8android:paddingLeft="@dimen/activity_horizontal_margin"
9android:paddingRight="@dimen/activity_horizontal_margin"
10android:paddingTop="@dimen/activity_vertical_margin"
11tools:context="com.example.cyborg.giornipassati.MainActivity">
12
13 <Button
14 android:layout_width="wrap_content"
15 android:layout_height="wrap_content"
16 android:text="Scegli una data!"
17 android:id="@+id/button"
18 android:layout_alignParentBottom="true"
19 android:layout_centerHorizontal="true"/>
20
21 <TextView
22 android:layout_width="wrap_content"
23 android:layout_height="wrap_content"
24 android:id="@+id/textView"
25 android:layout_centerVertical="true"
26 android:layout_centerHorizontal="true"/>
27</RelativeLayout>
Main Activity
1package com.example.cyborg.giornipassati;
2
3import android.app.DialogFragment;
4import android.support.v7.app.AppCompatActivity;
5import android.os.Bundle;
6import android.view.View;
7import android.widget.Button;
8import android.widget.TextView;
9
10public class MainActivity extends AppCompatActivity {
11
12 private Button mButton;
13 private TextView mTextView;
14
15 @Override
16 protected void onCreate(Bundle savedInstanceState) {
17 super.onCreate(savedInstanceState);
18 setContentView(R.layout.activity_main);
19
20 mButton = (Button) findViewById(R.id.button);
21 mTextView = (TextView) findViewById(R.id.textView);
22
23 mButton.setOnClickListener(new View.OnClickListener() {
24 @Override
25 public void onClick(View v) {
26 DialogFragment datePicker = new DatePickerFragment();
27 datePicker.show(getFragmentManager(),"Date Picker");
28
29 }
30 });
31 }
32}
DatePickerFragment
1package com.example.cyborg.giornipassati;
2
3import android.app.DatePickerDialog;
4import android.app.Dialog;
5import android.app.DialogFragment;
6import android.content.Context;
7import android.net.Uri;
8import android.os.Bundle;
9import android.support.v4.app.Fragment;
10import android.view.LayoutInflater;
11import android.view.View;
12import android.view.ViewGroup;
13import android.widget.Button;
14import android.widget.DatePicker;
15import android.widget.TextView;
16
17import org.joda.time.DateTime;
18import org.joda.time.Days;
19import org.joda.time.Minutes;
20import org.joda.time.Months;
21import org.joda.time.Seconds;
22import org.joda.time.Years;
23
24import java.util.Calendar;
25import java.util.Date;
26
27public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
28
29 @Override
30 public Dialog onCreateDialog(Bundle savedInstanceState){
31 //Use the current date as the default date in the date picker
32 final Calendar c = Calendar.getInstance();
33 int year = c.get(Calendar.YEAR);
34 int month = c.get(Calendar.MONTH);
35 int day = c.get(Calendar.DAY_OF_MONTH);
36 return new DatePickerDialog(getActivity(), this, year, month, day);
37 }
38
39 public void onDateSet(DatePicker view, int year, int month, int day) {
40 //Do something with the date chosen by the user
41 Date dataOdierna = new Date();
42 DateTime oggi = new DateTime(dataOdierna);
43 Calendar calendar = Calendar.getInstance();
44 calendar.set(year, month, day);
45 Date dataScelta = calendar.getTime();
46 DateTime scelta = new DateTime(dataScelta);
47
48 int anni = Years.yearsBetween(scelta, oggi).getYears();
49 int mesi = Months.monthsBetween(scelta, oggi).getMonths();
50 int giorni = Days.daysBetween(scelta, oggi).getDays();
51 int minuti = Minutes.minutesBetween(scelta, oggi).getMinutes();
52 int secondi = Seconds.secondsBetween(scelta, oggi).getSeconds();
53 long millisecondi = dataOdierna.getTime() - dataScelta.getTime();
54
55 TextView tv = (TextView) getActivity().findViewById(R.id.textView);
56
57 String messaggio = String.format("Sono passati %d anni, %d mesi, %d giorni, %d minuti, %d secondi",
58 anni,
59 mesi,
60 giorni,
61 minuti,
62 secondi,
63 millisecondi);
64 tv.setText(messaggio);
65 }
66}