캘린더를 이용한 기능을 만들어야 한다.
날짜를 선택하고, 그 날짜에 따른 액티비티를 만들어서 거기서 todo를 처리하도록 해야한다.
일단 캘린더 날짜를 클릭했을 때 어떻게 반응하는 지 알아야한다.
void setOnDateChangeListener(CalendarView,OnDateChangeListener listener)
void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth)
이거 두 개 메소드로 날짜를 클릭했을 때 동작을 설정할 수 있다.
calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
Toast.makeText(getApplicationContext(), dayOfMonth, Toast.LENGTH_LONG).show();
}
});
이렇게 했는데 계속 액티비티가 죽었다.
여기서는 아직 모르겠어서 다른 내용을 찾아보니 context에 문제가 있었다.
calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
Toast.makeText(Calendar.this, dayOfMonth, Toast.LENGTH_LONG).show();
}
});
getApplicationContext 대신에 현재 java파일을 연결해봤다. 안됐다.
calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
// Toast.makeText(Calendar.this, dayOfMonth, Toast.LENGTH_LONG).show();
String date = year + "/" + (month + 1) + "/" + dayOfMonth;
dateRecord.setText(date);
}
});
문자열을 생성해서 만들어놓은 MultilineTextView에 전달해줬다.
잘 작동한다.
이제 날짜를 누르면 해당 날짜를 출력하면서 todo화면을 꺼내는 기능을 만들어 볼거다. manifest에서 메인 액티비티를 calendar로 바꾸자.
전환이 용이하게 주석처리해줬다.
<activity android:name=".Calendar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity">
<!-- <activity android:name=".MainActivity"> -->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.MAIN" />-->
<!-- <category android:name="android.intent.category.LAUNCHER" />-->
<!-- </intent-filter>-->
</activity>
이제 액티비티가 전환 될 때 값을 넘겨줘야한다.
Intent를 사용하고, 넘겨줄 때는 putExtra, 받을 때는 getExtra를 사용해 액티비티간 전환 시 데이터를 주고 받을 수 있다.
final CharSequence[] date = {null};
goToMain.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// finish();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.putExtra("selectedDate", date[0]);
startActivity(intent);
}
});
calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
// Toast.makeText(Calendar.this, dayOfMonth, Toast.LENGTH_LONG).show();
date[0] = year + "/" + (month + 1) + "/" + dayOfMonth;
dateRecord.setText(date[0]);
}
});
일단 아직도 final 배열을 사용해야하는 지는 공부하지 않았다. putExtra("key", "value")로 값을 넘겨주고
Intent intent = getIntent();
final String date = intent.getExtras().getString("selectedDate");
day.setText(date);
getIntent 인스턴스를 만들어 key값으로 값을 받아오면 된다.
잘 값이 넘어가는 것을 볼 수 있다.
"댓글, 공감 버튼 한 번씩 누르고 가주시면 큰 힘이 됩니다"