스터디플래너 앱 개발일지(2)

👉 오늘 한 일

1. 할일 완료 버튼 누르면 json에서 삭제

CustomAdapter 클래스에서 완료 버튼 이벤트에 ArrayList를 만들고, for로 저장되어 있는 json string을 파싱해 객체 별로 ArrayList에 넣어준다. 그 후에 (json길이 - 완료 누른위치값)-1 인덱스를 제거해주었다.

2. 수정된 데이터 기기에 저장하기

이렇게 수정된 데이터를 SharedPreferences에 저장해야 한다. 그래서 처음에는 이렇게 코드를 짰다.

SharedPreferences sharedPreferences = PreferenceManager
                .getDefaultSharedPreferences(context);

그러나 이렇게 하면 Adapter에서 저장한값과 MainActivity에서 호출하는 값은 이름이 같아도 따로 분리된다. 구글링해서 방법을 찾았다.

SharedPreferences sharedPreferences = context.getSharedPreferences(MyPREFERENCES, Activity.MODE_PRIVATE);

이렇게 MYPREFERENCES라는 고정된 string을 key값으로 sharedPreferences를 선언하면 같은 앱에서는 데이터를 공유하게 된다. 여기서 Acitvity.MODE_PRIVATE는 같은 앱에서 공유한다는 뜻이다. 찾아보니 이 파라미터를 바꾸면 다른 앱끼리도 데이터 쓰기/읽기가 가능하다고 한다.

3. DialogDatePicker 구현

할일추가 화면에 팝업으로 뜨는 날짜선택 창구현

datapickerBtn.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View view) {
                Calendar c = Calendar.getInstance();
                int mYear = c.get(Calendar.YEAR);
                int mMonth = c.get(Calendar.MONTH);
                int mDay = c.get(Calendar.DAY_OF_MONTH);


                DatePickerDialog dialog =
                        new DatePickerDialog(EditTodo.this, callbackMethod, mYear, mMonth, mDay);
                dialog.show();

            }
        });

날짜를 선택하면 yy-m-d 형식으로 변환한다. 그런데 이때 ‘월’ 부분이 1씩 작게 나와서 1을 더해주었다. 서칭해보니 다른 사람들도 종종 발생하는 문제인 것 같다.

        callbackMethod = new DatePickerDialog.OnDateSetListener()
        {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
            {
                datapickerBtn.setText((year+"-"+(monthOfYear+1)+ "-" + dayOfMonth));
            }
        };

이제 날짜별로 묶어서 데이터를 정리하는 걸 구현해야 한다. Gson이라는 라이브러리를 사용해야 할것 같기도 하다. 같은 field끼리 다시 리스트화해야 한다.

[수정] 코드를 바꾸어야 하긴 하지만, 아예 데이터를 만들때부터 날짜별로 push하면 되지 않을까?