728x90
DatePickerDialog 을 이용하여 일자를 클릭하면 달력이 나타나고 달력의 일자를 선택하여 사용자가
일자를 선택 및 변경할 수 있는 화면을 만들자.
왼쪽 이미지와 같이 만든 후, TextView를 클릭하였을 때 달력이 나타나고,
달력에서 원하는 일자를 클릭하였을 때,
TextView에 선택한 일자가 들어가고자 한다.
그리고 일자옆 화살표를 클릭하였을때는 TextView의 일자가 하루단위로 이동하여 일자가 변경될 수 있도록 하고자 하였다.
일단 구현한 전체 코드는 아래와 같다.
public class Fragment_SeaSplitting extends Fragment {
TextView txt_date;
ImageButton btn_left;
ImageButton btn_right;
DatePickerDialog datePickerDialog;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat dateParseFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ViewGroup rootview = (ViewGroup) inflater.inflate(R.layout.fragment_seasplitting, container, false);
//초기화
txt_date = (TextView) rootview.findViewById(R.id.txt_date);
btn_left = (ImageButton) rootview.findViewById(R.id.btn_left);
btn_right = (ImageButton) rootview.findViewById(R.id.btn_right);
//이벤트 처리
OnClickListener onClickListener = new OnClickListener();
txt_date.setOnClickListener(onClickListener);
btn_left.setOnClickListener(onClickListener);
btn_right.setOnClickListener(onClickListener);
//금일 일자관련 출력
long now = System.currentTimeMillis(); //현재시간 가져오기
Date date = new Date(now); //Date형식으로 Convert
String getTime = dateFormat.format(date);
txt_date.setText(getTime);
return rootview;
}
class OnClickListener implements View.OnClickListener{
@Override
public void onClick(View view) {
String str_getDate = txt_date.getText().toString() + " 00:00:00";
Date date = null;
switch (view.getId()) {
case R.id.txt_date:
String str_date = txt_date.getText().toString();
int i_year = Integer.parseInt(str_date.substring(0,4));
int i_month = Integer.parseInt(str_date.substring(5,7));
int i_day = Integer.parseInt(str_date.substring(8));
//일자 달력 띄우기
datePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
//선택일자 Textview에 넣어주기
//받아오는 월은 0부터 시작하기때문에 받아온 ii값에 1 더하기
txt_date.setText(String.format("%d-%d-%d",i,i1+1,i2));
}
}, i_year, i_month-1, i_day); //달력의 월이 0부터 시작하여 현재달에서 한달빼기
datePickerDialog.show();
break;
case R.id.btn_left:
// <- 버튼으로 현재일자에서 하루빼기
try {
date = fnParseDate(str_getDate);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, -1);
txt_date.setText(dateFormat.format(cal.getTime()));
} catch (ParseException e) {
e.printStackTrace();
}
break;
case R.id.btn_right:
// -> 버튼으로 현재일자에서 하루 더하기
try {
date = fnParseDate(str_getDate);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, 1);
txt_date.setText(dateFormat.format(cal.getTime()));
} catch (ParseException e) {
e.printStackTrace();
}
break;
default:
break;
}
}
}
public Date fnParseDate(String getDate) throws ParseException {
Date date = dateParseFormat.parse(getDate);
return date;
}
}
일자를 클릭하였을 때 아래 코드와 같이 DatePickerDialog를 이용하여 달력을 띄우고 선택된 값을 가져와
TextView에 입력될 수 있도록 하였다.
//일자 달력 띄우기
datePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
//선택일자 Textview에 넣어주기
//받아오는 월은 0부터 시작하기때문에 받아온 ii값에 1 더하기
txt_date.setText(String.format("%d-%d-%d",i,i1+1,i2));
}
}, i_year, i_month-1, i_day); //달력의 월이 0부터 시작하여 현재달에서 한달빼기
datePickerDialog.show();
위 코드와 같이 작성 한 후 아래 이미지처럼 달력이 출력되고 선택 한 후 확인을 누를시에 선택된 일자가
TextView에 입력되는 것을 확인 하였다.
아래 코드는
이후 좌우 버튼 클릭시에 아래 코드와 같이 기존 일자 String값을 Date형식으로 Convert 후
일자를 하루 더하거나 뺀 후 다시 TextView에 String값으로 적용할 수 있도록 처리 하였다.
case R.id.btn_left:
// <- 버튼으로 현재일자에서 하루빼기
try {
date = fnParseDate(str_getDate);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, -1);
txt_date.setText(dateFormat.format(cal.getTime()));
} catch (ParseException e) {
e.printStackTrace();
}
break;
case R.id.btn_right:
// -> 버튼으로 현재일자에서 하루 더하기
try {
date = fnParseDate(str_getDate);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, 1);
txt_date.setText(dateFormat.format(cal.getTime()));
} catch (ParseException e) {
e.printStackTrace();
}
break;
String에서 Date형식으로 전환시에 ParseException사용이 필요하여 따로 parse를 시켜주는 Method를 작성하였다.
전체 코드에서 맨 마지막에 있는 Method가 그것이다.
public Date fnParseDate(String getDate) throws ParseException {
Date date = dateParseFormat.parse(getDate);
return date;
}
이걸로 동작하는데에 크게 이상없는것을 확인하였다.
728x90
'Programing > android' 카테고리의 다른 글
[android studio] 일자를 이용하여 요일 구하기 (0) | 2021.10.15 |
---|---|
[android studio] Spinner 사용하기 combobox처럼 여러아이템 중 하나 선택하기 (0) | 2021.10.12 |
[android studio] Geocoder 이용하여 위도, 경도 이용하여 주소가져오기 (0) | 2021.10.09 |
[android studio] 한국 양력 음력 변환하기 (0) | 2021.10.08 |
[android studio] SimpleDateFormat를 이용하여 현재 일자 구하기 (0) | 2021.10.08 |
댓글