Notice
Recent Posts
Recent Comments
Link
study record
[안드로이드] 리스트뷰 즐겨찾기(찜하기) 기능 구현 본문
구현한지 조금 지나서 남기게 됐지만 나도 이 기능을 구현하기 위해서 굉장히 많이 구글링하고 고생했기 때문에 꼭 글을 남기려고 한다.
내가 구현하고자 했던 기능은 리스트뷰의 각 아이템에서 버튼을 누르면 데이터베이스에 저장이 되고 저장된 아이템들은 다시 돌아왔을 때 눌러진 상태여야 한다는 것이다. 찾아보니 버튼으로 이것을 구현하기 보다는 체크박스로 구현하는 것이 더 편할 것 같아 체크박스로 즐겨찾기(찜하기) 기능을 구현하였다.
public boolean isCheck[] = new boolean[50];
일단 프래그먼트 클래스 상단에 boolean 배열을 선언한다.
그리고 Adapter의 getView() 메소드 안에 다음의 코드를 넣었다.
CheckBox favoriteBtn = (CheckBox) v.findViewById(R.id.favorite);
songJjimList = helper.selectSongJjim();
for (int i = 0; i < songJjimList.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if (songJjimList.get(i).Id.equals(list.get(j).Id)) {
isCheck[j] = true;
} else if (isCheck[j] == true) {
isCheck[j] = true;
} else if (isCheck[j] == false && !songJjimList.get(i).Id.equals(list.get(j).Id)){
isCheck[j] = false;
}
}
}
if (item != null) {
if (favoriteBtn != null) {
favoriteBtn.setChecked(false);
CheckBox cbox = (CheckBox)(v.findViewById(R.id.favorite));
cbox.setChecked(isCheck[position]);
cbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isCheck[position]) {
isCheck[position] = false;
helper.deleteSongJjim(list.get(position).Id);
Toast.makeText(getContext(), "찜을 취소했습니다.", Toast.LENGTH_SHORT).show();
} else{
isCheck[position] = true;
helper.insertSongJjim(list.get(position).Id, list.get(position).title, list.get(position).thumbnail);
Toast.makeText(getContext(), "노래를 찜했습니다.", Toast.LENGTH_SHORT).show();
}
}
});
favoriteBtn.setChecked(isCheck[position]);
}
}
리스트뷰 각 아이템 안에 들어가는 체크박스를 찾고,
로컬 DB에 같은 ID가 저장되어있으면 isCheck[] 배열을 true로 바꿔준다.
isCheck[]에 맞추어 setChecked를 해준다. 해당 프래그먼트에 들어왔을 때 언제라도 DB에 저장되어 있으면 체크표시를 해주는 것이다.
체크박스를 클릭하면 isCheck[]를 잘 설정해주고, DB에 저장한다.
setChecked()해주면 완료!
//같은 체크박스를 두 번 설정하는 것은 나도 이유를 모르겠다,,,
이렇게 하면 로컬 DB에 맞추어 저장되어 있으면 리스트뷰의 체크박스가 체크된 채로 그때그때 잘 보인다.
전체 작성 코드 (참고만 하시면 좋을 듯 합니다)
'안드로이드' 카테고리의 다른 글
[안드로이드] Android Thread 안드로이드 스레드 (0) | 2021.03.05 |
---|---|
[안드로이드] 캘린더 팝업 기능 AlertDialog (0) | 2021.02.28 |
[안드로이드] inflate란? (0) | 2021.02.10 |
[안드로이드] 인텐트 Intent (0) | 2021.02.05 |
[안드로이드] 액티비티와 프래그먼트 차이 (0) | 2021.02.04 |