전공/Android
[영화 정보 앱 만들기] 05. 정보 수정하기
BBungyaLog
2024. 6. 20. 22:58
# 구현하고자 하는 것
- recycle view 클릭 시 수정 창이 나온다
- 수정한 결과가 반영된다
# 어댑터 클릭 인터페이스 작성
// 클릭 인터페이스
interface OnItemClickListener {
fun onItemClick(view: View, position: Int)
}
var listener: OnItemClickListener? = null
fun setOnItemClickListener(listener: OnItemClickListener) {
this.listener = listener
}
# Update Activity 작성
- id를 사용
class UpdateActivity : AppCompatActivity() {
val updateBinding by lazy {
ActivityUpdateBinding.inflate(layoutInflater)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(updateBinding.root)
val dto = intent.getSerializableExtra("dto") as MovieDto
updateBinding.etUpdateMovie.setText(dto.movie)
updateBinding.etUpdateRate.setText(dto.rate)
updateBinding.etUpdateDirector.setText(dto.director)
updateBinding.btnUpdate.setOnClickListener {
dto.movie = updateBinding.etUpdateMovie.text.toString()
dto.rate = updateBinding.etUpdateRate.text.toString()
dto.director = updateBinding.etUpdateDirector.text.toString()
if (updateMovie(dto) > 0) {
setResult(RESULT_OK)
}
else {
setResult(RESULT_CANCELED)
}
finish()
}
updateBinding.btnUpdateCancel.setOnClickListener {
setResult(RESULT_CANCELED)
finish()
}
}
fun updateMovie(dto: MovieDto): Int {
val helper = MovieDBHelper(this)
val db = helper.writableDatabase
val updateValue = ContentValues()
updateValue.put(MovieDBHelper.COL_MOVIE, dto.movie)
updateValue.put(MovieDBHelper.COL_RATE, dto.rate)
updateValue.put(MovieDBHelper.COL_DIRECTOR, dto.director)
val whereClause = "${BaseColumns._ID}=?"
val whereArgs = arrayOf(dto.id.toString())
Log.d("UpdateActivity", "Updating movie with ID: ${dto.id}, values: $updateValue")
val resultCount = db.update(MovieDBHelper.TABLE_NAME,
updateValue, whereClause, whereArgs)
Log.d("UpdateActivity", "Rows updated: $resultCount")
helper.close()
return resultCount
}
}
# Main
- 어댑터 연결
adapter.setOnItemClickListener(object: MovieAdapter.OnItemClickListener {
override fun onItemClick(view: View, position: Int) {
val intent = Intent(this@MainActivity, UpdateActivity::class.java)
intent.putExtra("dto", movies.get(position)) // 클릭한 RecyclerView 항목 위치의 dto 전달
startActivityForResult(intent, REQ_UPDATE) // 수정결과를 받아오도록 Activity 호출
}
})
- intent 결과 반환
REQ_UPDATE -> {
if (resultCode == RESULT_OK) {
movies.clear() // 기존 항목 제거
movies.addAll(movieDao.getAllMovies()) // 항목 추가
binding.recyclerView.adapter?.notifyDataSetChanged() // RecyclerView 갱신
} else {
// 취소하면 아무것도 안함
}
}
동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.