๋ชฉ์ฐจ
๋ค์ด๊ฐ๊ธฐ ์ ์
์ค๋์ ๋ฉ์ธ ํ๋ฉด์์ ์ฐ์ด๋ api์ ์ฐ๋ํ๋ ๊ณผ์ ์ ๊ธฐ๋กํ์๋ค.
1๏ธโฃ๋ฉ์ธ ํ๋ฉด : ๊ฐ์๋ฌธ ์กฐํ ๊ธฐ๋ฅ ๊ตฌํ
๋ฉ์ธ ํ๋ฉด์์๋ ์ ์ฒด ๊ฐ์๋ฌธ์ ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ๋ก ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ํ์ฌ๋ ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด ๊ฐ์๋ฌธ์ ๋ณด์ฌ์ฃผ๋๋ฐ, ์ด์ API์ ์ฐ๋ํ์ฌ ์ค์ ๊ฐ์๋ฌธ ๋ด์ฉ๊ณผ ์ฐ๊ฒฐํด์ฃผ๋ ์์ ์ ํ๋ ค ํ๋ค. ๋จผ์ API์ ์ฐ๋๋ถํฐ ํด์ฃผ์๋ค.
๐ค๋ฐฐ์ด ์
1๏ธโฃRepository๋ interface๋ก ์ ์ ํ ์ด๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ค๋ค.
2๏ธโฃ์ธํฐํ์ด์ค์ hilt ์ฌ์ฉ๋ฒ
์ด๋ ๊ฒ Repository๋ฅผ interface๋ก ๋ง๋ค์ด์ค๋ค.
interface ReportRepository {
suspend fun searchReport(): Result<String>
}
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด searchReport ํจ์๋ฅผ ์ฌ์ ์ํด์ฃผ์๋ค.
class ReportRepositoryImpl
@Inject
constructor(
private val reportDataSource: ReportDataSource,
) : ReportRepository {
override suspend fun searchReport(): Result<String> {
return reportDataSource.searchReport()
}
}
์ด๋ ๊ฒ ์ธํฐํ์ด์ค์ธ ReportRepository ๊ฐ์ฒด๋ฅผ ๋ทฐ ๋ชจ๋ธ์์ ์ฌ์ฉํ๋ ค๋ฉด ์๋์ ๊ฐ์ด ReportModule๋ฅผ ์ ์ํด์ฃผ์๋ค.
์ด ๋ Hilt ๋ชจ๋์ ์ฌ์ฉํ์ฌ ํน์ ์ ํ์ ์ธ์คํด์ค ์ ๊ณต ๋ฐฉ๋ฒ์ Hilt์ ์๋ ค์ค๋ค.
์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ์ฝ์
ํด์ฃผ๊ธฐ
- Hilt module์ ์ถ์ ํด๋์ค๋ก ์ง์ ํด์ค๋ค.
- @Binds๋ก ์ฃผ์์ด ์ง์ ๋ ์ถ์ ํจ์๋ฅผ ์์ฑํด์ Hilt์๊ฒ ๊ฒฐํฉ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
- ํจ์ ๋ฐํ ์ ํ์ ํจ์๊ฐ ์ด๋ค ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋์ง๋ฅผ Hilt์๊ฒ ์๋ ค์ค๋ค.
-> ์ฐ๋ฆฌ๋ ReportRepository ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋ค๊ณ ์๋ ค์ฃผ์๋ค.
- ํจ์ ๋งค๊ฐ๋ณ์๋ ์ ๊ณตํ ๊ตฌํ์ Hilt์๊ฒ ์๋ ค์ค๋ค.
-> ์ฐ๋ฆฌ๋ ReportRepositoryImpl ์ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ์ฃผ์๋ค.
@InstallIn(SingletonComponent::class)
@Module
abstract class ReportModule {
@Binds
@Singleton
abstract fun bindReportRepository(impl: ReportRepositoryImpl): ReportRepository
@Binds
@Singleton
abstract fun bindReportDatasource(impl: ReportDataSourceImpl): ReportDataSource
}
์ด๋ ๊ฒ ๋ชจ๋์ ์ฌ์ฉํ์ฌ Hilt์ ๊ฒฐํฉ ์ ๋ณด๋ฅผ ์ ๊ณตํ ํ์ ๋ ์ด์ ์์ฑ์ ์ฝ์ ์ ์ฌ์ฉํ์ฌ ReportRepository ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค!
@HiltViewModel
class ReportViewModel
@Inject
constructor(private val reportRepository: ReportRepository) :
ViewModel() {
suspend fun getReportList() {
viewModelScope.launch {
reportRepository.searchReport()
}
}
}
2๏ธโฃ์๋ต๊ฐ์ DTO์ ์ฐ๊ฒฐํ์ฌ ์ ์ฒด ๊ฐ์๋ฌธ ๋ฆฌ์คํธ๋ฅผ ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ์ฐ๊ฒฐํด์ฃผ๊ธฐ
๋ชจ๋ฅด๋ ์
๐นDTO๋ฅผ ์์ฑํด์ฃผ๋ ค๊ณ ํ๋ response์ body์์ [ ] ๋๊ดํธ์ { } ์ค๊ดํธ์ ์ฐจ์ด์ ์๋ฏธ๋ฅผ ๋ชจ๋ฅด๊ณ ์์๋ค.
{ } ๋ ๊ฐ์ฒด๋ฅผ ํํํ๋ค. ๊ฐ์ฒด๋ ํค์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
[ ] ๋ ๋ฐฐ์ด์ ํํํ๋ค. ๋ฐฐ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์์๋๋ก ๋์ดํ ๊ฒ์ด๋ค.
ํฐ ๊ตฌ์กฐ๋ฅผ repoList๋ฅผ ์ดํด๋ณด๋ฉด
"repoList" : [ {๊ฐ์ฒด1}, {๊ฐ์ฒด2}, {๊ฐ์ฒด3}, ``` ] ๋ก ๊ตฌ์ฑ๋์ด์๋ค.
key : value ์!
reportList๋ผ๋ ํค์ ๋์ํ๋ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ค์ด ์์๋๋ก ๋์ด๋ ๋ฐฐ์ด๋ก ์ดํดํ๋ฉด ๋๋ค.
์ด๋ฅผ data class๋ก ๊ตฌํํ๋ ค๊ณ ํ๋ฉด , ์ด๋ ๊ฒ ReportList ๊ฐ์ฒด๋ฅผ ์ ์ํด์ฃผ๊ณ , ์ด๋ฌํ ๊ฐ์ฒด๊ฐ ๋์ด๋ ๋ฐฐ์ด์ ๋ด์ ๋ณ์์ธ reportList๋ฅผ ์ ์ํด์ฃผ์๋ค.
data class ReportInfo(
val reportList: List<ReportList>,
````
)
data class ReportList(
```
)
๐นkotlin์์ List์ ArrayList์ mutableList์ ์ฐจ์ด์ ๋ํด ์ ๋๋ก ์์ง ๋ชปํ๋ค.
kotlin์์๋ ๋ณ์๋ค์ Mutable ์ฌ๋ถ๋ก ๋๋๊ณ ์๋ค.
List์ MutableList์ ์ฐจ์ด๋ Read-Only์ธ์ง ์๋์ง์ ์ฐจ์ด์ด๋ค.
List๋ ์ค์ง ์ฝ๊ธฐ ์ ๊ทผ๋ง ๊ฐ๋ฅํ๋ค.
MutableList๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ ๊ทผ์ด ์ง์๋๋ค.
Array์ List์ ์ฐจ์ด๋ ๋ฌด์์ผ๊น?
ArrayList๋ ๋ฌด์์ผ๊น?
๋ฐ์ํ ์๋ฌ :
java.lang.IllegalArgumentException: Unable to create converter for class cohttp://m.teamfilmo.filmo.ui.model.ReportInfo
ํด๊ฒฐ : ์๋์ ์ฝ๋๋ฅผ retrofit ๊ตฌ์ฑ ์ ์ถ๊ฐํด์ฃผ์๋ค.
.addConverterFactory(GsonConverterFactory.create())
๊ฒฐ๊ณผ : ์ด๋ ๊ฒ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค!
๐คJson ๊ด๋ จ converter๋ ์๋๋ฐ Gson๊ณผ Json Converter์ ์ฐจ์ด๊ฐ ๋ฌด์์ผ๊น?
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์๋ต๊ฐ์ผ๋ก ์จ ReportList๋ค์ ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ๋ก ์ฐ๊ฒฐํ๋ ์์ ์ ํด๋ณด์. ์ฒ์์ด๊ธฐ ๋๋ฌธ์ ์ด๋ป๊ฒํด์ผํ ์ง ๋จผ์ ์ ๋ฆฌ๋ฅผ ํด๋ณด์๋ค.
์์๋ฅผ ์ ๋ฆฌํด๋ณด๋ฉด
1๏ธโฃAPI๋ฅผ ํตํด ์๋ฒ์ ์ ์ฅ๋ ๊ฐ์๋ฌธ ๋ด์ฉ ์ ์ฒด๋ฅผ ๋ถ๋ฌ์จ๋ค
๋ทฐ ๋ชจ๋ธ์์ ReportInfo ๋ด์ ์๋ ReportList๋ฅผ ์ด๋ํฐ์ ์ฐ๊ฒฐํด์ค๋ค.
2๏ธโฃ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ์ด๋ํฐ์ ํด๋น ๊ฐ์๋ฌธ ๋ฆฌ์คํธ๋ฅผ ์ฐ๊ฒฐํด์ค์ ๋ทฐ์ ๋ฐ์ธ๋ฉํด์ค๋ค.
์ด๋ป๊ฒ ์ด๋ํฐ์ ReportList๋ฅผ ์ฐ๊ฒฐํด์ค๊น ???
๐ค1์ฐจ ๊ตฌํ ๊ธฐ๋ก
๊ตฌํ ํ๋ฆ
๐น ๋ทฐ๋ชจ๋ธ์์ ๊ฐ์๋ฌธ ์กฐํ ์ ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ
๋ทฐ๋ชจ๋ธ์์ ReportRepository.searchReport ๋ฉ์๋๋ฅผ ํธ์ถ
์ป์ ์๋ต๊ฐ์ ReportInfo ๋ฅผ ์ฌ์ฉํ์ฌ ReportList๋ฅผ ์ถ์ถํ ๋ฐ์ดํฐ๋ฅผ MutableLiveData์ธ ReportList์ value๊ฐ์ผ๋ก ๋ฃ์ด์ค๋ค.
๐น์ด ๋ฐ์ดํฐ๋ฅผ ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
Adapter์์ List<ReportList> ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ reportList ๋ณ์๋ฅผ ์์ฑํด์ฃผ๊ณ
1๏ธโฃReportViewModel
@HiltViewModel
class ReportViewModel
@Inject
constructor(private val reportRepository: ReportRepository) :
ViewModel() {
val reportList = MutableLiveData<List<ReportList>?>()
init {
requestReportList()
}
fun requestReportList() {
viewModelScope.launch {
val result = reportRepository.searchReport()
if (result.isSuccess) {
val response = result.getOrNull()
val reports = response?.reportList?.toList()
Log.d("๊ฐ์๋ฌธ", reportList.toString())
reportList.value = reports
} else {
result.getOrThrow()
}
}
}
}
๐นMutableLiveData
๐นinit { ``` } ์ ์ฌ์ฉ
๐นviewModelScope.launch { ``` }
2๏ธโฃ ReportFragment
private val reportViewModel by viewModels<ReportViewModel>()
runBlocking {
reportViewModel.requestReportList()
}
val movieReviewAdapter = ReviewAdapter()
reportViewModel.reportList.observe(viewLifecycleOwner) { reports ->
if (reports != null) {
movieReviewAdapter.setReportList(reports)
}
}
๐นrunBlocking ๊ณผ runCatching์ ์ฐจ์ด
๐นobserve ๋?
๐นviewLifeCycleOwner ๋?
๋ทฐ ๋ชจ๋ธ์ reportList๋ฅผ ๊ด์ฐฐํ๊ณ , ์ด ReportList๊ฐ null์ด ์๋๋ผ๋ฉด ์ด๋ํฐ์ setReportList๋ฅผ ํธ์ถํด์ค๋ค. ์ด ๋ List<ReportList> ๋ฅผ ๊ฐ์ด ์ ๋ฌํด์ค๋ค
3๏ธโฃ ReportAdapter
๊ทธ๋ผ ์ด๋ํฐ์์๋ ๊ทธ List<ReportList>๋ฅผ ๋ฐ์์ ์ด๋ํฐ ํด๋์ค์ ์์ฑ์ธ reportList ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ , notifyDataSetChanged ํจ์๋ฅผ ํธ์ถํด์ค๋ค.
class ReviewAdapter : RecyclerView.Adapter<ReviewAdapter.ReviewViewHolder>() {
private var reportList: List<ReportList> = listOf()
fun setReportList(reportList: List<ReportList>) {
this.reportList = reportList
notifyDataSetChanged()
}
๐นnotifyDataSetChanged( )๋?
notifyDataSetChanged ๋ ?
๊ทผ๋ฐ ์ง๊ธ์ searchReport ๋ฉ์๋๋ฅผ ํตํด ์๋ฒ์ ์ ์ฅ๋ ์ ์ฒด ๊ฐ์๋ฌธ์ ๋ถ๋ฌ์ค๋๋ฐ notifyDataSetChanged๋ฅผ ํธ์ถํด์ค์ผํ ๊น? ํ๋ ์๋ฌธ์ด ๋ค์๋ค.
์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ฐ๋ก ๋ฐ์ธ๋ฉํด์ฃผ๋๋ฐ ์ ์
๋ฐ์ดํธ๊ฐ ํ์ํ ๊น ์กฐ๊ธ ๋ ์ฐพ์๋ด์ผ๊ฒ ๋ค.
๊ทธ๋์ notifyDataSetChanged์ ์ฃผ์์ฒ๋ฆฌ๋ฅผ ํ๊ณ ๋ค์ ์คํํ๋๋...!!! ์๋ฌด๊ฒ๋ ๋ณด์ด์ง ์์๋ค.
์ฐ์ notifyDataSetChanged ๋ฉ์๋๋ฅผ ์ฌ์ฏํ๋ ๊ฒ์ ํ์ํ๋ค. ์๋ํ๋ฉด ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ก ์ธํด ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์์ ๋ณด์ฌ์ค ์์ดํ
๊ณผ ๊ฐ์๊ฐ ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์ด๋ค!
๐ค๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ ๋ฐฉ๋ฒ์๋ ๋ฌด์์ด ์์๊น?
๋ฉ์ธํ๋ฉด์ ์กด์ฌํ๋ ํ๋๊ทธ๋จผํธ, ์ด๋ํฐ๋ฅผ ๊ณต์ ํ ์ ์์๊น?
ํ์ฌ ๋ฉ์ธ ํ๋ฉด์์ ์ ์ฒด ๊ฐ์๋ฌธ์ด ๋ณด์ด๋ ์ ์ฒด ํญ๊ณผ ํ๋ก์ฐํ๋ ๊ฐ์๋ฌธ๋ง ๋ณด์ด๋ ํ๋ก์ ํญ์ด ์๋ค.
ํ์ฌ ์ํฉ์ ์ ๋ฆฌํด๋ณด๋ฉด,
๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ๋ก ์์ดํ ๋ค์ ๋ณด์ฌ์ค ๋ ๊ณตํต์ ์ผ๋ก searchReport api๋ฅผ ํธ์ถํ์ฌ ์์ดํ ์ ๋ณด์ฌ์ค๋ค.
์ฐจ์ด๋ searchReport์ ๋ค์ด๊ฐ๋ ์ธ์์ ์ฐจ์ด์ด๋ค.
[์ ์ฒด]์ ๊ฒฝ์ฐ ์๋ฌด ์ธ์์์ด searchReport api๋ฅผ ํธ์ถํด์ค ๊ฒฝ์ฐ
[ํ๋ก์]์ ๊ฒฝ์ฐ ํ๋ก์ฐํ๋ ์ฌ๋์ ๊ฒ์๊ธ๋ง ๋ณด๊ธฐ ์ํด์์๋ ์ ์ฒด ์ค์์ ํ๋ก์ฐํ๋ ์ฌ๋์ ๊ฐ์๋ฌธ ๊ฒ์๊ธ๋ง ๋ณด์ด๋๋ก ํํฐ๋ง์ด ํ์ํ๋ค.
์ฐ์ ์ ์ด๋ป๊ฒ ํํฐ๋ง ํ ๊ฒ์ธ์ง๋ณด๋ค๋ ์ ์ฒด ๊ตฌ์กฐ๋ฅผ ์ง๋ณด์!
๋๋ Adapter๋ฅผ ๋ณ๋๋ก 2๊ฐ ๊ตฌํํด์ค์ผํ ๊น? ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ๋ทฐ ํ๋ 2๊ฐ๊ฐ ํ๋์ ์ด๋ํฐ๋ฅผ ๊ณต์ ํ๋ฉด ์๋ ๊น?
๐ฅ์ด๋ํฐ์์ ๋ทฐ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์์ด๋ ๋๋๊ฐ?
๋ฐ์ ์๋ฌ
handleAppError, pkgName : com.teamfilmo.filmo, userId : 0, errorType : 9, repeat : true component : com.teamfilmo.filmo.ui.report.ReportViewModel.<init> []errorStack: Caused by: java.lang.NoSuchMethodException: com.teamfilmo.filmo.ui.report.ReportViewModel.<init> []
at java.lang.Class.getConstructor0(Class.java:2363)
at java.lang.Class.getDeclaredConstructor(Class.java:2201)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.kt:199)
... 57 morejava.lang.RuntimeException: Cannot create an instance of class com.teamfilmo.filmo.ui.report.ReportViewModel
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.
์์ธ : ์ด ์๋ฌ๋ FollowingFragment์์ ๋ทฐ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ @AndroidEntryPoint ์ด๋ ธํ ์ด์ ์ ์ ์ด์ฃผ์ง์์์ ๋ฐ์ํ ์๋ฌ์๋ค!
ํด๊ฒฐ : ์ด๋ ธํ ์ด์ ์ถ๊ฐ
3 3056-3056 SDHMS:BarT...r:AppError com.sec.android.sdhms I update AppError : uid=10607, pkg=com.teamfilmo.filmo, errorType=crash
2024-04-11 01:09:26.161 3056-3056 SDHMS:BarT...r:AppError com.sec.android.sdhms I analyze app error : uid=10607, pkg=com.teamfilmo.filmo, appErrorCount=2
๋ ํ๋๊ทธ๋จผํธ์์ ๋์ผํ๊ฒ ๋ทฐ๋ชจ๋ธ์ requestReportList ๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ป๋๋ก ์ฝ๋ ์์ฑ ์
ํ๋ก์ ํ์ด์ง๋ก ์ด๋ํ ํ 1์ด ์ดํ์ ์ฑ์ด ๋น์ ์ ์ข
๋ฃ๋์๋ค.
์ํ์ด ๋๋๊ณ ๋ค์ ๋์์๋ค!! 20240426!!
์ ๋ฒ์ ์ด์ด ์์ง ํด๊ฒฐ๋์ง ์์ ์๋์ ์๋ฌ๋ฅผ ํ์ ํด๋ณด์!
2024-04-26 23:01:58.562 3132-3132 SDHMS:BarT...r:AppError com.sec.android.sdhms I update AppError : uid=10607, pkg=com.teamfilmo.filmo, errorType=crash
2024-04-26 23:01:58.565 3132-3132 SDHMS:BarT...r:AppError com.sec.android.sdhms I analyze app error : uid=10607, pkg=com.teamfilmo.filmo, appErrorCount=5
Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:1242 com.android.server.am.AppErrors.crashApplicationInner:724 com.android.server.am.AppErrors.crashApplication:584 com.android.server.am.ActivityManagerService.handleApplicationCrashInner:9748 com.android.server.am.ActivityManagerService.handleApplicationCrash:9627
ํ์ธ์ ์ํด์ ์ฐ์ Following Fragment์ Adapter ์ฝ๋๋ฅผ ์ฃผ์ ์ฒ๋ฆฌ ํ ์คํํด์ฃผ์๋ค.
์ด๋ฅผ ํตํด ๋ณ์ ์ด๊ธฐํ ๊ณผ์ ์ ๋ฌธ์ ๊ฐ ์์์ ์ ์ ์์๋ค.
์๋์ ๊ฐ์ด reviewAdapter ๋ณ์์ ๋ํด ์ ์ธํด์ฃผ๊ณ , ์ด๊ธฐํ ์์ ์ ์ดํ ํ ์ ์๋๋ก ํด์ฃผ์๋ค.
private lateinit var reviewAdapter: ReviewAdapter
๊ทธ๋ฌ๋ ์๋์ฒ๋ผ ์ฝ๋๋ฅผ ์์ฑํด์ค ํ์ธ๋ฐ ์ ์ํด์ค ์ฝ๋์ ์ ์ฉ์ด ๋์ง ์์๋ค.
reviewAdapter = ReviewAdapter()
์คํ ์ ์ํ
๐ซฑ๋ฒํผ ํด๋ฆญ์ผ๋ก ํ๋๊ทธ๋จผํธ๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋๋ฐ ๋ทฐํ์ด์ 2๋ฅผ ์ฌ์ฉํด์ผํ ๊น?ํ๋ ์๋ฌธ์ด ๋ค์๋ค.
๊ณต์๋ฌธ์์์ ๋ทฐํ์ด์ 2๋ฅผ "์ค์์ดํํ ์ ์๋ ๋ทฐ ๋๋ ํ๋๊ทธ๋จผํธ๋ฅผ ์ ๊ณต" ์ด๋ผ๊ณ ์ค๋ช ํ๊ณ ์์๋ค.
๋ฐ๋ผ์ ๋ทฐํ์ด์ 2๊ฐ ์๋ ํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ก ํ๋๊ทธ๋จผํธ๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋๋ก ์ฝ๋๋ฅผ ์์ ํด์ฃผ์๋ค.
์ฌ๊ธฐ์ ๋ฐฐ์ด ๋ด์ฉ์ ํ๋๊ทธ๋จผํธ๋ฅผ ๋ณด์ฌ์ค ๋ supportFragmentManager์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainPageBinding.inflate(layoutInflater)
setContentView(binding.root)
setFrag(0)
binding.allReportButton.setOnClickListener {
setFrag(0)
}
binding.FollowingReportButton.setOnClickListener {
setFrag(1)
}
}
private fun setFrag(fragNum: Int) {
val fragment = supportFragmentManager.beginTransaction()
when (fragNum) {
0 -> fragment.replace(R.id.fragmentArea, ReviewFragment()).commit()
else -> fragment.replace(R.id.fragmentArea, FollowingReviewFragment()).commit()
}
}
๐์ข์์ ๋ฒํผ ์ฐ๋ํ๊ธฐ
๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ์๋ โค๏ธ ์ข์์ ๋ฒํผ์ ํด๋ฆญ ํ ๋๋ง๋ค ์ข์์๊ฐ ๋ฑ๋ก๋๋๋ก ํด๋ณด์!
์ฐ์ ํด๋ฆญ์ด ์ ์์ ์ผ๋ก ๋๋์ง ํ ์คํธํ๊ธฐ ์ํด ๋ก๊ทธ๋ก ํ์ธํด์ค ๊ฒฐ๊ณผ OK์๋ค!
์ง๊ธ ๊ตฌ์กฐ๋ฅผ ์ ๋ฆฌํด๋ณด๋ฉด
๋ฉ์ธ ํ์ด์ง์์ 2๊ฐ์ ํ๋๊ทธ๋จผํธ ํ๋ฉด์ ์ ๊ณตํ๊ณ
๊ฐ ํ๋๊ทธ๋จผํธ ํ๋ฉด์์๋ ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๋๋ฐ ์ด ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์๋ ๋ฆฌ๋ทฐ ๋ฐ์ดํฐ + ์ข์์ + ๋๊ธ + ๋ถ๋งํฌ ๋ฐ์ดํฐ๊ฐ ํจ๊ปํ๊ณ ์๋ค.
์ข์์ ๋ฑ๋ก ๊ธฐ๋ฅ์ ์ฐ๋ํ๊ธฐ ์์ํ๋๋ฐ.. ํ๋ํ ์ฌ์ ์ด ํผ์ณ์ก๋ค.
์ฐ์ ์ข์์๋ฅผ ์๋ฒ์ ๋ฑ๋กํ๋ ค๋ฉด ํ์ฌ์ ์์ดํ ์ reportId๋ฅผ ๊ฐ์ด ๋๊ฒจ์ ํธ์ถํด์ค์ผํ๋ค.
์ด๋์ ํธ์ถ์ ํด์ค์ผํ ๊น?
'๐ค2024 ์๋๋ก์ด๋ > Filmo ์ํ ํ๋ก์ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฉ์ธ ํ๋ฉด : ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ๊ตฌํ ๊ณผ์ ์ ๋ฆฌ (0) | 2024.05.10 |
---|---|
Android recyclerview ์ดํดํ๊ธฐ!!! (0) | 2024.04.29 |
Android UI : Toolbar ์ฑ ๋ฐ ์ ์ฉํด์ฃผ๊ธฐ (1) | 2024.04.07 |
๊ฒ์ ํ๋ฉด ๊ตฌํ ๊ณผ์ ์ ๋ฆฌ (0) | 2024.04.07 |
๐จ๋ฉ์ธ ํ๋ฉด UI ๊ตฌํ ๊ณผ์ ๊ณผ ์ง๋ฌธ ๊ธฐ๋ก (0) | 2024.04.05 |