[Android Dev] :: DatePickerDialog [กล่องตอบโต้สำหรับเลือกวันที่]

ห่างหายกันไปนานเลย ตั้งแต่ที่ผมเรียนวิชานั้นเสร็จก็ไม่ได้กลับมาเขียน Android Tutorial อีกเลย
วันนี้ขอซะหน่อยแล้วกันครับ ^___^

ปกติเรามี DatePicker ให้ใช้เลยบน Android ใช่ไหมครับ ? เราสามารถลากมาใช้ได้เลย
นั่นก็เป็นวิธีนึง แต่ผมจะมานำเสนออีกวิธีนึง ซึ่งจะประหยัดพื้นที่หน้าจอได้มากกว่า

เพราะว่าเราใช้ DatePickerDialog
ลักษณะคือ เราจะมี Button อยู่อันนึง พอ User กดปุ่มนี้
จะแสดง AlertDialog ที่มีลักษณะเป็น DatePicker ขึ้นมาให้เลือกวันที่
พอ User เลือกวันที่เสร็จแล้ว วันที่นั้น ก็จะมาอัพเดทที่ Text ของ Button ครับ

ภาพตัวอย่าง ::

นี่หน้าจอครับ มีปุ่มอยู่ปุ่มเดียว ถ้าเปิดตัวโปรแกรมมา Text จะอัพเดทเป็นวันที่ปัจจุบันให้ครับ

เมื่อกดปุ่มแล้ว ก็จะแสดง DatePicker แบบนี้ครับ
จากนั้นพอเลือกเสร็จกด Set แล้ว Text บน Button ก็จะเปลี่ยนเป็นวันที่ที่เลือกไว้ครับ
มาเริ่มกันเลยครับ
ส่วนของ UI คงไม่พูดถึงนะครับ ไม่มีอะไรนอกจาก Button อันเดียว กลางจอ 
ส่วนคุณจะเอาไปประยุกต์แบบไหน ก็ตามสบายเลยครับ

ตามเดิมครับ สิ่งที่ต้องใช้มีเท่านี้ import เข้ามาซะ

ต่อไปก็ประกาศตัวแปร ซึ่งประกอบไปด้วยตัวแปรปุ่ม และตัวแปรที่จะเก็บค่าของวันที่


จากนั้นทำการ Link ปุ่มกับ UI แล้วทำการ setEventListener สำหรับการกดปุ่มให้เรียบร้อย
ใช้ฟังก์ชั่นใน java.util.Calendar ทำการขอวันที่ปัจจุบันมาเก็บให้เรียบร้อย
และเรียกใช้ updateDisplay(); [อยู่ข้างล่าง] เพื่ออัพเดท Text บน Button

นี่ก็ Method updateDisplay(); ครับ ... การทำงานก็ไม่มีอะไร แค่ setText ด้วย String Builder
แต่มีปัญหาคือ เดือนของ DatePicker มันเริ่มที่ 0 ฉะนั้นเราต้อง +1 เพิ่มไปด้วยครับ
(ไม่เข้าใจเหตุผลเหมือนกัน)

Method นี่คือ EventListener ของการกดปุ่มครับ ก็เรียกใช้ showDialog()
ซึ่ง Method นี้จะไปทำการ Override onCreateDialog ให้อีกทีหนึ่ง...


Method แรกจะเป็นการเรียกให้ Dialog นั้นแสดงขึ้นมาหลังจากการกดปุ่ม
ส่วน Method ที่สองจะเป็นการกระทำหลังจากที่กด Set แล้ว
ซึ่งจะทำการ Update Text ของ Button ให้ตรงกับที่ผู้ใช้เลือก...

จบแล้วนะครับ สำหรับ DatePickerDialog
โค้ดก็ไม่ได้เข้าใจอะไรยากมากนะ...

โค้ดนี้ จขบ. ไม่ได้เขียนเองนะครับ ... ต้องการใช้แบบนี้แล้วบังเอิญเจอใน stackoverflow
ต้องขอขอบคุณมา ณ ที่นี้ด้วยครับ ^____^

Comments

  1. คือวันมันเเสดงเเล้วครับ เเต่ Dialog มันไม่ขึ้นให้ เซ็ตอะ ครับ


    อันนี้code นะ ครับ


    package com.example.tourindy;

    import java.util.ArrayList;
    import java.util.Calendar;

    import android.app.*;
    import android.os.Bundle;
    import android.view.*;
    import android.widget.*;

    public class date extends Activity {
    //spinner command
    private Spinner menu;
    private Spinner Click;
    //caalendarDialog command
    private int mYear;
    private int mMonth;
    private int mDay;
    static final int DATE_DIALOG_ID = 0;
    Button chooseDateButton;

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.date);
    //spinner command
    initWidget();
    AddItem();
    //caalendarDialog command
    chooseDateButton = (Button) findViewById(R.id.Button01);
    chooseDateButton.setOnClickListener(dateButtonClicked);
    final Calendar c = Calendar.getInstance();
    mYear = c.get(Calendar.YEAR);
    mMonth = c.get(Calendar.MONTH);
    mDay = c.get(Calendar.DAY_OF_MONTH);
    updateDisplay();

    }

    //caalendarDialog command

    private void updateDisplay() {

    this.chooseDateButton.setText(new StringBuilder().append(mDay)
    .append("/").append(mMonth + 1).append("/").append(mYear)
    .append(" "));

    }

    private View.OnClickListener dateButtonClicked = new View.OnClickListener() {

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

    };

    protected Dialog OnCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
    return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,
    mDay);

    }
    return null;
    }

    private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
    int dayOfMonth) {
    // TODO Auto-generated method stub
    mYear = year;
    mMonth = monthOfYear;
    mDay = dayOfMonth;
    updateDisplay();
    }

    };

    // spinner command

    private void initWidget() {

    menu = (Spinner) findViewById(R.id.spinner1);
    Click = (Spinner) findViewById(R.id.Spinner01);
    }

    private void AddItem() {
    // Add Menu
    ArrayList myList = new ArrayList();
    myList.add("Bangkok");
    myList.add("Chang Rai");

    ArrayAdapter myAdapter = new ArrayAdapter(this,
    android.R.layout.simple_spinner_item, myList);
    myAdapter
    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    menu.setAdapter(myAdapter);
    myAdapter
    .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    Click.setAdapter(myAdapter);
    }

    }



    ReplyDelete

Post a Comment

Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android

ประสบการณ์การถ่ายภาพดาราศาสตร์ (Astrophotography)