일단 이미지 스키마를 만들었다.
WriteImage.tk
@Entity(tableName = "write_image")
data class WriteImage(
@PrimaryKey(autoGenerate = true)
val _id: Int?,
@ColumnInfo(name = "diary_id")
val diary_id: Int?,
@ColumnInfo(name = "name")
val name: String?,
@ColumnInfo(name = "count")
val count: Int?
)
그리고 메인에서 LiveData를 Observe 하는데 거기서 Diary 뿐만 아니라 WriteImag 도 Observe 하게 변경해 주었다.
그러면 사진이 삭제되어도 변경되고 글이 변경되어도 바뀌기 때문이다.
MainFragment.tk
class MainFragment : Fragment() {
companion object {
fun newInstance() = MainFragment()
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.main_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val recyclerView = MainFragment_RecyclerView_view
val viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
//diary와 writeImage 둘다 확인해야함.
viewModel.getAll().observe(this.viewLifecycleOwner, Observer { diary ->
//여기 추가!!
viewModel.getAllWriteImage().observe(this.viewLifecycleOwner, Observer { writeImage ->
recyclerView.adapter = MainDiaryAdapter(diary, writeImage, this.context!!)
})
})
}
}
MainDiaryAdapter.kt
class MainDiaryAdapter(
private val diary: List<Diary>,
private val writeImages: List<WriteImage>,
private val context: Context
) : RecyclerView.Adapter<MainDiaryAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
...
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val item = diary[position]
for (writeImage in writeImages) {
//count가 0인 것만 보여줌
if (writeImage.diary_id == item._id && writeImage.count == 0) {
//이미지 name의 주소 가져옴
val path =
context
.getExternalFilesDir(Environment.DIRECTORY_PICTURES)!!
.path
+ "/"
+ writeImage.name
//gilde로 이미지 보여줌
Glide.with(context).load(path).into(holder.imageView)
holder.imageView.visibility = View.VISIBLE
break
}
}
...
}
override fun getItemCount(): Int = diary.size
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
...
}
}
아마 더 좋은 방법이 있을 것이다... 이 방법은 무식하게 그냥 모든 이미지를 가져와서 id를 비교하기 때문에 나중에는 디비에서 골라서 가져오도록 해야 한다.
여기서는 path를 가져오는 방법만 알아가도록 하자. Write에서 저장한 이미지 path를 가져와 거기에 내 DB에 저장된 이름을 넣어 이미지가 저장된 경로와 파일 이름을 합쳐서 Glide에 넣어주면 알아서 가져와 View에 보여준다. Glide는 아주 편하다. 꼭 써보자!!
다음엔 메인 클릭 시 게시글을 보는 화면을 구현해보겠다.
'개발 일기 > Android' 카테고리의 다른 글
[Kotlin] 간단 메모장 만들기 5 #Camera #Gallery #PopupMenu (0) | 2020.02.21 |
---|---|
[Kotlin] 간단 메모장 만들기4 #RecyclerView #Adapter (0) | 2020.02.19 |
[Kotlin] 간단 메모장 만들기3 #LiveData #ViewModel (0) | 2020.02.19 |
[Kotlin] 간단 메모장 만들기2 #Room (0) | 2020.02.17 |
[Kotlin] 간단 메모장 만들기 1 #Intent #FloatingActionButton #다크모드 (0) | 2020.02.17 |