feat(character-detail): 캐릭터 상세

- 탭 UI 추가
This commit is contained in:
2025-08-22 03:39:11 +09:00
parent 52c1f61109
commit 989a0f361b
6 changed files with 117 additions and 6 deletions

View File

@@ -11,19 +11,19 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import coil.load
import coil.transform.CircleCropTransformation
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentListBottomSheet
import kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentRepository
import kr.co.vividnext.sodalive.chat.talk.room.ChatRoomActivity
import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.databinding.ActivityCharacterDetailBinding
import kr.co.vividnext.sodalive.extensions.dpToPx
import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koin.android.ext.android.inject
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentRepository
import org.koin.androidx.viewmodel.ext.android.viewModel
class CharacterDetailActivity : BaseActivity<ActivityCharacterDetailBinding>(
ActivityCharacterDetailBinding::inflate
@@ -68,6 +68,32 @@ class CharacterDetailActivity : BaseActivity<ActivityCharacterDetailBinding>(
// 뒤로 가기
binding.detailToolbar.tvBack.setOnClickListener { finish() }
// 탭 구성: 상세, 갤러리
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("상세"))
binding.tabLayout.addTab(binding.tabLayout.newTab().setText("갤러리"))
binding.tabLayout.addOnTabSelectedListener(object :
com.google.android.material.tabs.TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: com.google.android.material.tabs.TabLayout.Tab) {
if (tab.position == 0) {
// 상세 탭: 기존 스크롤 화면 표시
binding.scrollViewCharacterDetail.visibility = View.VISIBLE
binding.flContainer.visibility = View.GONE
} else {
// 갤러리 탭: 컨테이너 표시 및 갤러리 프래그먼트 로드
binding.scrollViewCharacterDetail.visibility = View.GONE
binding.flContainer.visibility = View.VISIBLE
val fragment =
kr.co.vividnext.sodalive.chat.character.detail.gallery.CharacterGalleryFragment()
supportFragmentManager.beginTransaction()
.replace(R.id.fl_container, fragment)
.commit()
}
}
override fun onTabUnselected(tab: com.google.android.material.tabs.TabLayout.Tab) {}
override fun onTabReselected(tab: com.google.android.material.tabs.TabLayout.Tab) {}
})
// 다른 캐릭터 리스트: 가로 스크롤
val recyclerView = binding.rvOtherCharacters
recyclerView.layoutManager = LinearLayoutManager(

View File

@@ -0,0 +1,19 @@
package kr.co.vividnext.sodalive.chat.character.detail.detail
import android.os.Bundle
import android.view.View
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.databinding.FragmentCharacterDetailBinding
/**
* 캐릭터 상세 - 상세 탭
* TODO: 기존 CharacterDetailActivity UI 바인딩 로직을 이 Fragment로 점진적으로 이전합니다.
*/
class CharacterDetailFragment : BaseFragment<FragmentCharacterDetailBinding>(
FragmentCharacterDetailBinding::inflate
) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// 추후 상세 UI/로직 반영 예정
}
}

View File

@@ -0,0 +1,18 @@
package kr.co.vividnext.sodalive.chat.character.detail.gallery
import android.os.Bundle
import android.view.View
import kr.co.vividnext.sodalive.base.BaseFragment
import kr.co.vividnext.sodalive.databinding.FragmentCharacterGalleryBinding
/**
* 캐릭터 상세 - 갤러리 탭 (빈 화면)
*/
class CharacterGalleryFragment : BaseFragment<FragmentCharacterGalleryBinding>(
FragmentCharacterGalleryBinding::inflate
) {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// 추후 갤러리 콘텐츠 추가 예정
}
}