G Y U L O G

무한정 Todo List보다 컨셉을 정해서 가기로 했다.

 

최소 3개, 최대 5개의 체크박스가 필요한데 이건 switch ~ case를 이용해서 일종의 Exception Throwing 을 시도해보았다.

                switch (count[0]){
                    case 0:
                        createCheckbox(cb1, str);
                        layout.addView(cb1);
                        str = null;
                        plaintext.setText(null);
                        break;
                    case 1:
                        createCheckbox(cb2, str);
                        layout.addView(cb2);
                        str = null;
                        plaintext.setText(null);
                        break;
                    case 2:
                        createCheckbox(cb3, str);
                        layout.addView(cb3);
                        str = null;
                        plaintext.setText(null);
                        break;
                    case 3:
                        createCheckbox(cb4, str);
                        layout.addView(cb4);
                        str = null;
                        plaintext.setText(null);
                        break;
                    case 4:
                        createCheckbox(cb5, str);
                        layout.addView(cb5);
                        str = null;
                        plaintext.setText(null);
                        break;
                    case 5:
                        Toast.makeText(getApplicationContext(), "할 일이 너무 많습니다.", Toast.LENGTH_LONG).show();
                        break;
                }

공백이 많은 데 그냥 복사해서 그렇다. 화이트스페이스 제거하는 게 귀찮아서 그냥 뒀다.

 

이제 만들어지는 건 문제가 없다.

 

removeView는 날짜가 바뀔 때 실행 해 줄것이다. 기능이 있다면 체크박스가 생성된 시점의 날짜 != 오늘 기기의 날짜 이면 checkbox text를 따로 저장함과 동시에 removeView를 실행해서 새로운 체크박스를 사용하는데 문제가 없도록 할 것 이다.

 

private static void createCheckbox(CheckBox cb, CharSequence str){
        cb.setText(str);
        cb.setChecked(false);
        cb.setTextSize(20);
        cb.setPadding(8,8,8,8);
    }

이런 함수를 만들어서 조금이라도 파편화시킬 수 있도록 했다. 이제 하루에 몇개의 체크박스를 만들 건지 설정해주어야한다.


Seekbar를 이용할 건데 게이지의 총량을 설정해서 5등분하면 될 것 같다.

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(progress <= 33) textView.setText("3개");
                else if(33 < progress && progress <= 66) textView.setText("4개");
                else textView.setText("5개");
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

5등분을 하려다 어차피 내가 사용할 값들은 3,4,5이므로 3등분해서 넣어줬다.

 

onProgressChanged는 seekbar의 현재 변화를 가져와서 알려주는 함수이다. 구글 안드로이드 공식문서를 참고했다.

developer.android.com/reference/android/widget/SeekBar?hl=en

 

SeekBar  |  Android 개발자  |  Android Developers

 

developer.android.com


이제 seekbar에서 가져온 값으로 만들어질 checkbox개수를 설정하면 된다.

 

seekbar에서 값을 함수 밖으로 꺼내려고 하니 값 처리가 안됐다.

권고사항을 읽어보니까 외부에서 선언된 변수를 내부클래스에서 접근하려면 final로 정의되어있어야 한다는 것 같다. 그건 알겠는데 1크기의 배열로 final 선언하는 이유는 아직 잘 모르겠다.

final int[] seekbar_value = {0};

이렇게 하니까 오류가 사라졌다.

if(count[0] < seekbar_value[0]){
                    switch (count[0]){
                        case 0:
                            createCheckbox(cb1, str);
//                        cb1.setPadding(8,8,8,8);
                            layout.addView(cb1);
                            str = null;
                            plaintext.setText(null);
                            break;
                        case 1:
                            createCheckbox(cb2, str);
//                        cb2.setText(str);
//                        cb2.setChecked(false);
//                        cb2.setTextSize(20);
                            layout.addView(cb2);
                            str = null;
                            plaintext.setText(null);
                            break;
                        case 2:
                            createCheckbox(cb3, str);
                            layout.addView(cb3);
                            str = null;
                            plaintext.setText(null);
                            break;
                        case 3:
                            createCheckbox(cb4, str);
                            layout.addView(cb4);
                            str = null;
                            plaintext.setText(null);
                            break;
                        case 4:
                            createCheckbox(cb5, str);
                            layout.addView(cb5);
                            str = null;
                            plaintext.setText(null);
                            break;
                        case 5:
                            Toast.makeText(getApplicationContext(), "할 일이 너무 많습니다.", Toast.LENGTH_LONG).show();
                            break;
                    }
                    count[0] += 1;
                }
                else {
                    Toast.makeText(getApplicationContext(), "내가 정한 일보다 많습니다.", Toast.LENGTH_LONG).show();
                }

일단 오늘 목표로한 기능구현은 완료했다.

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

공유하기

facebook twitter kakaoTalk kakaostory naver band