저번에 SharedPreferences에 ArrayList로 저장하는 것을 해봤는데, 이것을 활용해서 검색 리스트를 만들어보려고 한다.
검색 리스트는 RecyclerView로 표현할 거고, 검색 완료를 했을 때 Adapter에 있는 리스트를 갱신할 것이다.
Adapter 작업
class SearchListAdapter: RecyclerView.Adapter<SearchListAdapter.ViewHolder>() {
private var itemList: ArrayList<PrefData> = arrayListOf()
inner class ViewHolder(private val mBinding: ItemSearchBinding) : RecyclerView.ViewHolder(mBinding.root) {
fun bind(mItem: PrefData) {
mBinding.tvSearchText.text = mItem.text
mBinding.tvSearchDate.text = mItem.date
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = ItemSearchBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(itemList[position])
}
override fun getItemCount(): Int {
return itemList.size
}
fun setList(pList: ArrayList<PrefData>) {
itemList = pList
notifyItemRangeChanged(0, itemList.size)
}
}
초기에 itemList를 빈 리스트로 두고 Activity에서 setList에 값이 전달되면
notifyItemRangeChanged를 통해서 RecyclerView를 업데이트한다.
Activity에서 Adapter에 리스트 넘겨주기
mAdapter.setList(arrayListPrefs) // Adapter에 데이터 넘김
앱이 실행되고 onCreate에서 SharedPreferences에 데이터가 있는지 확인하여 리스트를 넘겨준다.
데이터가 없을 경우에 빈 화면으로 보이기가 싫다면 visible과 gone을 적절히 사용해서
"검색 이력이 없습니다." 등의 텍스트로 표시하거나 이미지를 노출하는 등의 처리를 하면 될 것 같다.
앱 실행 이후에는 EditText에서 검색 완료 이벤트가 발생하면 Adapter에 리스트를 넘겨준다.
(검색 이후 EditText에 텍스트가 남지 않도록 클리어 처리를 했다.)
EditText에서 검색 완료 이벤트가 발생했을 때 리스트가 쌓이고,
앱을 종료하고 재실행했을 때 검색했던 리스트가 잘 표시되는 것을 확인할 수 있다.
만약 검색 리스트에서 항목을 삭제하고 싶다면 ArrayList의 removeAt이나 removeAll을 사용하고,
적절한 notifyChanged를 통해 RecyclerView를 업데이트하면 된다.
'Android > SharedPreferences' 카테고리의 다른 글
[Android] EncryptedSharedPreferences로 암호화 하기 (0) | 2022.11.24 |
---|---|
[Android] SharedPreferences에 ArrayList로 저장하기 (0) | 2022.11.16 |
댓글