feat(ui): 캐릭터 탭

- loadingDialog, Toast 라이브 데이터 옵저버 연결
This commit is contained in:
2025-08-05 02:04:49 +09:00
parent b1c9c3e124
commit ea22c7244c
3 changed files with 22 additions and 1 deletions

View File

@@ -6,7 +6,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import coil.transform.RoundedCornersTransformation
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.RequestOptions

View File

@@ -6,6 +6,7 @@ import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.Toast
import androidx.annotation.OptIn import androidx.annotation.OptIn
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
@@ -23,6 +24,7 @@ import kr.co.vividnext.sodalive.chat.character.curation.CurationSectionAdapter
import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacter import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacter
import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacterAdapter import kr.co.vividnext.sodalive.chat.character.recent.RecentCharacterAdapter
import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.databinding.FragmentCharacterTabBinding import kr.co.vividnext.sodalive.databinding.FragmentCharacterTabBinding
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
@@ -43,15 +45,19 @@ class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
private lateinit var popularCharacterAdapter: CharacterAdapter private lateinit var popularCharacterAdapter: CharacterAdapter
private lateinit var newCharacterAdapter: CharacterAdapter private lateinit var newCharacterAdapter: CharacterAdapter
private lateinit var curationSectionAdapter: CurationSectionAdapter private lateinit var curationSectionAdapter: CurationSectionAdapter
private lateinit var loadingDialog: LoadingDialog
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
setupView() setupView()
observeViewModel()
viewModel.fetchData() viewModel.fetchData()
} }
private fun setupView() { private fun setupView() {
loadingDialog = LoadingDialog(requireActivity(), layoutInflater)
setupBanner() setupBanner()
setupRecentCharactersRecyclerView() setupRecentCharactersRecyclerView()
setupPopularCharactersRecyclerView() setupPopularCharactersRecyclerView()
@@ -376,6 +382,19 @@ class CharacterTabFragment : BaseFragment<FragmentCharacterTabBinding>(
} }
} }
private fun observeViewModel() {
viewModel.isLoading.observe(viewLifecycleOwner) {
if (it) {
loadingDialog.show(screenWidth)
} else {
loadingDialog.dismiss()
}
}
viewModel.toastLiveData.observe(viewLifecycleOwner) {
it?.let { Toast.makeText(requireActivity(), it, Toast.LENGTH_LONG).show() }
}
}
private fun onRecentCharacterClick(character: RecentCharacter) { private fun onRecentCharacterClick(character: RecentCharacter) {
// TODO: 최근 대화한 캐릭터 클릭 처리 // TODO: 최근 대화한 캐릭터 클릭 처리

View File

@@ -63,6 +63,9 @@ class CharacterTabViewModel(
_popularCharacters.value = data.popularCharacters _popularCharacters.value = data.popularCharacters
_newCharacters.value = data.newCharacters _newCharacters.value = data.newCharacters
_curationSections.value = data.curationSections _curationSections.value = data.curationSections
} else {
_toastLiveData.value =
it.message ?: "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
} }
}, },
{ {