본문 바로가기
Android

DatePicker 를 활용하여 생년월일 정보저장.

by 일용직 코딩노동자 2019. 11. 18.
728x90
반응형

XML부터 간단하게 보여드리겠습니다.

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

    <DatePicker
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:datePickerMode="spinner"
        android:calendarViewShown="false"
        android:id="@+id/datepicker"
        ></DatePicker>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="저장"
        android:layout_gravity="center"
        android:layout_marginTop="300dp"
        android:id="@+id/pickerBtn"
        ></Button>
</LinearLayout>

프리뷰를 보시면 이런식으로 나타나있습니다.

 

이화면으로 가기위해서 우선 

이러한 텍스트뷰 2가지를 만들었습니다.

<LinearLayout
        android:layout_width="350dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:text="출생년도"
            android:textSize="30dp">
        </TextView>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15dp"
            android:text="출생년도를 지정해주세요."
            android:textSize="15dp"
            android:id="@+id/ymBtn"
            android:onClick="onClick">
        </TextView>
    </LinearLayout>

원래 생성되어있는 부모 리니어레이아웃 안에 자식 리니어레이아웃을 생성했습니다.

보시면 출생년도를 지정해달라는 문구에 onClick 이벤트가 걸려있습니다.

이제 java코드를 살펴보시겠습니다.

 

public void onClick(View v){
        switch(v.getId()){
            case R.id.ymBtn:
                Intent picker = new Intent(getApplicationContext(),picker.class);
                startActivityForResult(picker,1000);
                break;
        }
    }

메인에서 이 코드를 사용하여 picker클래스로 화면을 intent로 넘겨줍니다.

그러면 맨 위에 날짜 선택이 가능한 화면으로 넘어갑니다.

 

이제 화면이 넘어가면.

 

picker 클래스를 살펴볼게요.

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;

import androidx.appcompat.app.AppCompatActivity;

import com.example.long_and_long_chair.R;

public class picker extends AppCompatActivity {

    DatePicker datepicker;
    Button pickerBtn;
    public static String yy,mm,dd;
    public static boolean check=false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.datepicker);
        pickerBtn = findViewById(R.id.pickerBtn);
        datepicker = findViewById(R.id.datepicker);

        datepicker.init(datepicker.getYear(), datepicker.getMonth(), datepicker.getDayOfMonth(),

        new DatePicker.OnDateChangedListener() {

            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                yy=Integer.toString(year);
                mm=Integer.toString(monthOfYear+1);
                dd=Integer.toString(dayOfMonth);
                check=true;
            }
        });
        pickerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(),MainActivity.class);
                intent.putExtra("yy",yy);
                intent.putExtra("mm",mm);
                intent.putExtra("dd",dd);
                startActivityForResult(intent,1000);
            }
        });
    }
}

여기가 이제 텍스트뷰를 클릭했을때 넘어오는 자바코드입니다.

이 자바코드는 맨위에 날짜를 선택하는 xml과 연결되있습니다.

 

보시면 onDateChanged에서 값을 int형으로 받아서 toString로 형변환 하여 String형 변수에 저장시켜줍니다.

그리고 check변수를 true값으로 넣어주죠. check변수의 용도는 후에 살펴보겠습니다.

 

그리고 다시 저장버튼을 누르면 intent로 값을 넘겨주고 화면도 전환시켜줍니다.

그럼 텍스트뷰를 클리했던 메인으로 다시 돌아옵니다.

 

그럼 메인 onCreate안에

if(Picker.check){
            Intent pickerData = getIntent(); /*데이터 수신*/
            if(pickerData.getExtras().getString("yy")!=null && pickerData.getExtras().getString("mm") != null && pickerData.getExtras().getString("dd") != null){
                year = pickerData.getExtras().getString("yy");
                month = pickerData.getExtras().getString("mm");
                day = pickerData.getExtras().getString("dd");
                ymBtn.setText(year+"년 "+month+"월 "+day+"일");
            }
            else{
                Toast.makeText(getApplicationContext(),"년월일을 다시 입력해주세요",Toast.LENGTH_SHORT).show();
            }
        }

이 코드를 적어줍니다.

그럼 check변수가 true라는건 값을 받아왔다는 것이므로.

메인을 아무리 실행해도 날짜설정을 하지 않았는 이상은 저 조건문에 들어오지 않습니다.

 

자 그럼 날짜를 설정했으면 check변수에 true값이 들어왔으니

intent값을 받아옵니다.

그 intent값은 년월일이 되겠네요.

그 값을 String형으로 선언되어있는 변수들에 넣어줍니다.

pickerData.getExtras().getString("yy"); 이 부분이 yy로 분류된 키값에 지정된 데이터값을 받아오겠다는겁니다.

yy로 지정된 키값은 위에 클래스에서 넘겨줄때 년 데이터를 담고있지요.

그것을 토대로 아까 클릭했던 텍스트뷰의 텍스트를 다시 재정의 해줍니다.

그럼 정상적으로 값이 바뀌는것을 보실수 있습니다.

 

 

에뮬레이터로 진행하여 년월일이 다소 이상하게 보일수는 있으나, 직접 핸드폰에 넣어서 테스트 해보시면

정상구동이 이뤄집니다.

 

궁금하신 사항은 댓글 남겨주세요. 

728x90
반응형

댓글