2010-07-21 14 views
16

Có thể đăng bất kỳ mã mẫu nào cho một bộ chọn ngày đơn giản trong Android hay không.Bộ chọn ngày trong Android

Nếu không thể chọn ngày trong Android, bạn có thể chọn ngày cần chọn.

Trả lời

57

Sử dụng DatePicker

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

Đó là availible từ API Level 1

Dưới đây là một ví dụ làm thế nào để sử dụng DatePickerDialog.

Đầu tiên thêm một TextView và một nút để Layout.xml bạn

<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"/> 

Tiếp theo, bạn phải khởi tạo Button và TextView trong Phương pháp onCreate của bố cục. Bạn cần lớp này biến

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

private TextView mDateDisplay; 
private Button mPickDate; 

static final int DATE_DIALOG_ID = 0; 

Đây là phương pháp 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(); 
} 

phương pháp 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(" ")); 
} 

Việc gọi lại nghe cho 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(); 
     } 
    }; 

Phương thức onCreateDialog, được gọi bởi showDialog()

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

Hy vọng nó sẽ giúp, sử dụng và hoạt động tốt.

Ví dụ từ

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

+0

Cách sử dụng tính năng này trong Phân đoạn? – 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

Xin lỗi tôi đã thấy điều này và phải đưa ra một số phản hồi. 1. Xử lý trong nhà xây dựng Aahh !!!? Số không bao giờ sử dụng các nhà thầu với các thành phần Lifecycled. 2. Vui lòng sử dụng hằng số cho các giá trị Bundle, ít có khả năng phạm sai lầm. 3. Trình xử lý hơi bị hack, điều này sẽ không hoạt động nếu hoạt động của bạn được cứu sinh. Vì vậy, có thể tìm cách tiếp cận tốt hơn cho điều này. –

+0

Sự cố khi sử dụng nó (Trình xử lý) là gì? –

0

Câu trả lời được chấp nhận không xử lý người dùng nhấp hủy trong lần thứ bộ chọn ngày tháng. Trong trường hợp đó, không có gì cần được cập nhật.

Tôi muốn điều tương tự như OP, nhưng tôi chỉ muốn nội tuyến. Đây là những gì tôi đã sử dụng:

Tạo callback sẽ được gọi khi nút bảng chọn ngày OK được nhấp:

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

Sau đó sử dụng đoạn mã sau vào phương pháp mà bạn tạo ra một nút để chọn ngày:

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

sử dụng: import java.util.Lịch;

thay vào đó: nhập android.icu.util.Calendar.

gói này chỉ hỗ trợ cho cấp API-24 không thấp hơn. Đây là gói chúng tôi cần sử dụng để tải Lịch trên hộp thoại,

hoạt động tốt.