G Y U L O G

캘린더를 이용한 기능을 만들어야 한다.

 

날짜를 선택하고, 그 날짜에 따른 액티비티를 만들어서 거기서 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값으로 값을 받아오면 된다.

잘 값이 넘어가는 것을 볼 수 있다.

"댓글, 공감 버튼 한 번씩 누르고 가주시면 큰 힘이 됩니다"

공유하기

facebook twitter kakaoTalk kakaostory naver band