2010-07-21 4 views
16

È possibile inserire un codice di esempio per un semplice selettore di date in Android.Selezione data in Android

Se la selezione data non è possibile in Android, è necessaria un'opzione per scegliere una data.

risposta

57

Utilizzare il DatePicker

http://developer.android.com/reference/android/widget/DatePicker.html

Si tratta di un lavaggio in quanto API Livello 1

Ecco un esempio di come utilizzare il DatePickerDialog.

Prima aggiungere un TextView e un pulsante per il vostro layout.xml

<Button android:id="@+id/myDatePickerButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Choose Date"/> 

<TextView android:id="@+id/showMyDate" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

successivo si deve inizializzare il Button e TextView nel metodo onCreate del layout. Hai bisogno di questo variabili di classe

private int mYear; 
private int mMonth; 
private int mDay; 

private TextView mDateDisplay; 
private Button mPickDate; 

static final int DATE_DIALOG_ID = 0; 

Qui il metodo onCreate

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mDateDisplay = (TextView) findViewById(R.id.showMyDate);   
    mPickDate = (Button) findViewById(R.id.myDatePickerButton); 

    mPickDate.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      showDialog(DATE_DIALOG_ID); 
     } 
    }); 

    // get the current date 
    final Calendar c = Calendar.getInstance(); 
    mYear = c.get(Calendar.YEAR); 
    mMonth = c.get(Calendar.MONTH); 
    mDay = c.get(Calendar.DAY_OF_MONTH); 

    // display the current date 
    updateDisplay(); 
} 

metodo UpdateDisplay:

private void updateDisplay() { 
    this.mDateDisplay.setText(
     new StringBuilder() 
       // Month is 0 based so add 1 
       .append(mMonth + 1).append("-") 
       .append(mDay).append("-") 
       .append(mYear).append(" ")); 
} 

L'ascoltatore di callback per la DatePickDialog

private DatePickerDialog.OnDateSetListener mDateSetListener = 
    new DatePickerDialog.OnDateSetListener() { 
     public void onDateSet(DatePicker view, int year, 
           int monthOfYear, int dayOfMonth) { 
      mYear = year; 
      mMonth = monthOfYear; 
      mDay = dayOfMonth; 
      updateDisplay(); 
     } 
    }; 

Il metodo onCreateDialog, chiamato da showDialog()

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DATE_DIALOG_ID: 
     return new DatePickerDialog(this, 
       mDateSetListener, 
       mYear, mMonth, mDay); 
    } 
    return null; 
} 

Speranza che aiuta, usato e funziona benissimo.

Esempio da

http://developer.android.com/guide/tutorials/views/hello-datepicker.html

+0

Come utilizzare questo in un frammento? – Milad

3
public class dateresult extends Activity 
{ 
private TextView tvdisplaydate; 
private DatePicker dpResult; 
private Button bntchangedate; 

private int year; 
private int month; 
private int day; 
static final int DATE_DIALOG_ID = 999; 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.result); 
    setCurrentdateonView(); 
    addListenerOnButton(); 

    } 
       public void setCurrentdateonView(){ 

        tvdisplaydate = (TextView)findViewById(R.id.tvdate); 
        dpResult = (DatePicker) findViewById(R.id.dpResult); 

        final Calendar c = Calendar.getInstance(); 
        year = c.get(Calendar.YEAR); 
        month = c.get(Calendar.MONTH) ; 
        day = c.get(Calendar.DAY_OF_MONTH); 

        tvdisplaydate.setText(new StringBuffer()     .append(month+1).append("-").append(day).append("-").append(year).append("")); 
        dpResult.init(year, month, day, null);         
       }    
      public void addListenerOnButton(){     
       bntchangedate = (Button)findViewById(R.id.bntchangedate); 
       bntchangedate.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
        showDialog(DATE_DIALOG_ID); 

        } 
       });    
      }     
      @Override 
      protected Dialog onCreateDialog(int id) { 
       // TODO Auto-generated method stub 
       switch(id){ 

       case DATE_DIALOG_ID: 
        return new DatePickerDialog(this,datePickerLisner,year,month,day); 

       } 
       return null; 
      }     
      private DatePickerDialog.OnDateSetListener datePickerLisner = new DatePickerDialog.OnDateSetListener() { 
       @Override 
       public void onDateSet(DatePicker view, int Selectyear,int Selectmonth, int Selectday) { 
        year= Selectyear; 
        month= Selectmonth; 
        day = Selectday; 
        tvdisplaydate.setText(new StringBuilder() 
        .append(Selectmonth+1).append("-").append(Selectday).append("-").append(Selectyear).append("")); 
          dpResult.init(year, month, day, null);     
       } 
      }; 
} 


<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

<Button 
    android:id="@+id/bntchangedate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Change Date" /> 

<TextView 
    android:id="@+id/lbldate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Current Date (M-D-YYYY) :" 
    android:textAppearance="?android:attr/textAppearanceLarge"/> 

<TextView 
    android:id="@+id/tvdate" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 
<DatePicker 
    android:id="@+id/dpResult" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

</LinearLayout> 
1
public class DatePickerDialogFragment extends DialogFragment{ 
    //ResidenceActivity date = new ResidenceActivity(); 
    Handler mHandler ; 
    int mDay; 
    int mMonth; 
    int mYear; 

    public DatePickerDialogFragment(Handler h){ 
     /** Getting the reference to the message handler instantiated in MainActivity class */ 
     mHandler = h; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState){ 

     /** Creating a bundle object to pass currently set date to the fragment */ 
     Bundle b = getArguments(); 

     /** Getting the day of month from bundle */ 
     mDay = b.getInt("set_day"); 

     /** Getting the month of year from bundle */ 
     mMonth = b.getInt("set_month"); 

     /** Getting the year from bundle */ 
     mYear = b.getInt("set_year"); 

     /** DatePickerDialog's "Set" click listener */ 
     DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() { 
     // @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
       mDay = dayOfMonth; 
       mMonth = monthOfYear; 
       mYear = year; 

       /** Creating a bundle object to pass currently set date to the fragment */ 
       Bundle b = new Bundle(); 

       /** Adding currently set day to bundle object */ 
       b.putInt("set_day", mDay); 

       /** Adding currently set month to bundle object */ 
       b.putInt("set_month", mMonth); 

       /** Adding currently set year to bundle object */ 
       b.putInt("set_year", mYear); 

       /** Adding Current date in a string to bundle object */ 
       b.putString("set_date", Integer.toString(mDay) + "/" + Integer.toString(mMonth+1) + "/" + Integer.toString(mYear)); 

       /** Creating an instance of Message */ 
       Message m = new Message(); 

       /** Setting bundle object on the message object m */ 
       m.setData(b); 



       /** Message m is sending using the message handler instantiated in MainActivity class */ 
       mHandler.sendMessage(m); 




      } 
     }; 

     /** Opening the DatePickerDialog window */ 
     return new DatePickerDialog(getActivity(), listener, mYear, mMonth, mDay); 
    } 
} 
+0

Scusa se ho visto questo e ho dovuto dare un feedback. 1. Gestore nel costruttore Aahh !!!? No. non utilizzare mai costruttori con componenti Lifecycled. 2. Utilizzare le costanti per i valori del pacchetto, con meno probabilità di commettere errori. 3. I gestori sono un po 'incisivi, che non funzionano se la tua attività è sottoposta al ciclo di vita. Quindi forse cercare un approccio migliore a questo. –

+0

Qual è il problema nell'utilizzarlo (The Handler)? –

0

La risposta accettata non lo fa gestire l'utente facendo clic su Annulla in th e data selettore. In tal caso, nulla dovrebbe essere aggiornato.

Volevo la stessa cosa di OP, ma volevo solo in linea. Ecco quello che ho usato:

Creare il callback che verrà chiamata quando il pulsante di selezione data fa clic su OK:

public void datePicked(int year, int month, int day) { 
    buttonDate.setText(String.valueOf(year) + "/" + 
      String.valueOf(month) + "/" + String.valueOf(day)); 
} 

quindi utilizzare il seguente codice nel metodo in cui si crea un pulsante per scegliere la data:

buttonDate = (Button) rootView.findViewById(R.id.button_select_date); 
    buttonDate.setText("Select Date"); 
    buttonDate.setOnClickListener(new View.OnClickListener() { 
     public void setReturnDate(int year, int month, int day) { 
      datePicked(year, month, day); 
     } 

     @Override 
     public void onClick(View v) { 
      Dialog datePickerDialog = new DatePickerDialog(activity, new DatePickerDialog.OnDateSetListener() { 
       @Override 
       public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

       } 
      }, leagueEndDate.get(Calendar.YEAR), leagueEndDate.get(Calendar.MONTH), leagueEndDate 
        .get(Calendar.DAY_OF_MONTH)); 
      datePickerDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
       @Override 
       public void onDismiss(DialogInterface dialog) { 
        setReturnDate(((DatePickerDialog) dialog).getDatePicker().getYear(), 
          ((DatePickerDialog) dialog).getDatePicker().getMonth(), ((DatePickerDialog) dialog) 
            .getDatePicker().getDayOfMonth()); 
       } 
      }); 
      datePickerDialog.show(); 
     } 
    }); 
0
Step 1 : create a java file: 

package com.example.babs; 

import java.util.Calendar; 

import android.app.Activity; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.DatePicker; 
import android.app.FragmentManager; 


public class EditUserInfo extends Activity { 


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

    } 

    public class DatePickerFragment extends DialogFragment 
    implements DatePickerDialog.OnDateSetListener { 


     // pgrm mark ---- ---- ----- ---- ---- ----- ---- ---- ----- ---- ---- ----- 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      // Use the current date as the default date in the picker 
      final Calendar c = Calendar.getInstance(); 
      int year = c.get(Calendar.YEAR); 
      int month = c.get(Calendar.MONTH); 
      int day = c.get(Calendar.DAY_OF_MONTH); 

      // Create a new instance of DatePickerDialog and return it 
      return new DatePickerDialog(getActivity(), this, year, month, day); 
     } 

     public void onDateSet(DatePicker view, int year, int month, int day) { 
      // Do something with the date chosen by the user 
     } 

    } 


    public void showDatePickerDialog(View v) { 

     FragmentManager fragmentManager = getFragmentManager(); 

     DialogFragment newFragment = new DatePickerFragment(); 
     newFragment.show(fragmentManager, "datePicker"); 
    } 

}// end main class EditUserInfo 

step 2: your xml file must contain : 

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" 
    android:fillViewport="true" > 
</ScrollView> 
<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/pick_date" 
    android:onClick="showDatePickerDialog" /> 
0

uso: import java.util.Calendario;

: importare android.icu.util.Calendar.

questo pacchetto supporta solo per API livello-24 non meno di quello. Questo è il pacchetto che dobbiamo usare per ottenere il calendario nella finestra di dialogo,

funziona perfettamente.