무한정 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에서 가져온 값으로 만들어질 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();
}
일단 오늘 목표로한 기능구현은 완료했다.
"댓글, 공감 버튼 한 번씩 누르고 가주시면 큰 힘이 됩니다"