게시글 작성 화면으로 넘어가기(View 클릭)
게시글 작성 액티비티(BoardWriteActivity.kt)를 새롭게 하나 만들어준다
class BoardFragment : Fragment(), View.OnClickListener
우선 클래스에 onClickListener를 추가한 뒤,
binding.btnWrite.setOnClickListener(this)
onViewCreated에서 onClickListener를 만들어준다
override fun onClick(v: View) {
when (v.id) {
R.id.btn_write -> {
val intent = Intent(requireContext(), BoardWriteActivity::class.java)
startActivity(intent)
}
}
}
그리고 onClick 함수를 만든다
* Intent 사용 시, Fragment 에서는 context 자리에 this 대신 requireContext() / getContext()를 사용해줘야 context 인수로 인식한다 (그냥 context로만 작성해도 getContext()로 인식)
게시글 조회 화면으로 넘어가기(리사이클러뷰 클릭) & 데이터 전달
private val context = itemView.context
뷰홀더 클래스 안에 context 변수를 추가해 준다
fun bind(item: BoardItem) {
itemView.setOnClickListener {
val intent = Intent(context, BoardDetailActivity::class.java)
intent.putExtra("data", item)
intent.run { context.startActivity(this) }
}
}
bind 함수를 만들어 클릭시 putExtra로 데이터를 전달하고, 액티비티를 이동시킨다
override fun onBindViewHolder(holder: BoardViewHolder, position: Int) {
val boardItem = itemList[position]
holder.bind(boardItem)
}
onBindViewHolder 함수에서 bind 함수를 불러준다
class BoardDetailActivity: AppCompatActivity() {
private lateinit var binding: BoardDetailActivityBinding
private lateinit var data: BoardItem
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = BoardDetailActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
val data = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
intent.getParcelableExtra("data", BoardItem::class.java)
} else {
intent.getParcelableExtra("data") as? BoardItem
}
binding.postingBadge.text = data?.badge
binding.postingTitle.text = data?.title
binding.postingContent.text = data?.content
}
}
세부 화면 액티비티에서 위와 같이 코드를 작성해 준다
val data = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
intent.getParcelableExtra("data", BoardItem::class.java)
} else {
intent.getParcelableExtra("data") as? BoardItem
}
데이터를 받아오는 부분에서 위와 같이 안드로이드 버전 별 분기를 나누어 작성해주어야 한다
(참고. https://velog.io/@jeep_chief_14/getParcelableExtra-getSerializable-is-deprecated-in-Android-13)
+
에러 메시지
android.content.ActivityNotFoundException: Unable to find explicit activity class
한 화면에서 다른 화면으로 넘어갈 때 발생하는 문제인데,
새로운 acitivty를 생성하면 Manifest 파일에 추가해줘야 하는데 그러지 않아서 발생했다
<activity
android:name=".BoardDetailActivity"/>
application 태그 안에 해당 액티비티를 입력해 주면 된다
'Programing > Android(Kotlin)' 카테고리의 다른 글
[Android/Kotlin] 리사이클러뷰(Fragment) 구현 (0) | 2023.08.28 |
---|---|
[카카오맵 API/Kotlin] 앱에 지도 화면 띄우기 (0) | 2023.08.25 |
[Udemy] 퀴즈 앱(Android 및 Kotlin 개발 완전 정복) (0) | 2023.07.21 |
[Udemy] 계산기(Android 및 Kotlin 개발 완전 정복) (0) | 2023.07.12 |
[Udemy] 분 단위 나이 계산기(Android 및 Kotlin 개발 완전 정복) (0) | 2023.06.26 |