From 96511a4edb90c25a1aa67a06a06a0b16c90b5165 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=B4=EC=8B=9C?= <67777523+EmilyCh0@users.noreply.github.com> Date: Mon, 24 Jul 2023 20:11:42 +0900 Subject: [PATCH] =?UTF-8?q?[AN/USER]=20=20feat:=20=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=9D=84=20=ED=94=84=EB=9E=98=EA=B7=B8?= =?UTF-8?q?=EB=A8=BC=ED=8A=B8,=20=EB=B0=94=ED=85=80=EB=84=A4=EB=B9=84?= =?UTF-8?q?=EA=B2=8C=EC=9D=B4=EC=85=98=20=EA=B5=AC=ED=98=84(#92)=20(#104)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 빈 프래그먼트 추가 (FestivalList, TicketList, MyPage) * feat: 바텀네비게이션 menu * feat: HomeActivity 바텀네비게이션 구현 * refactor: 확장함수 제거 * chore: 문자열 리소스 주석 추가 * fix: onDestroyView에서 binding null 처리 --- .../festago/app/src/main/AndroidManifest.xml | 12 ++-- .../festago/presentation/ui/MainViewModel.kt | 2 +- .../presentation/ui/home/HomeActivity.kt | 59 +++++++++++++++++++ .../presentation/ui/home/HomeItemType.kt | 7 +++ .../home/festivallist/FestivalListFragment.kt | 29 +++++++++ .../ui/home/mypage/MyPageFragment.kt | 29 +++++++++ .../ui/home/ticketlist/TicketListFragment.kt | 29 +++++++++ .../ic_bottom_navigation_festival.xml | 5 ++ .../drawable/ic_bottom_navigation_user.xml | 5 ++ .../app/src/main/res/layout/activity_home.xml | 27 +++++++++ .../res/layout/fragment_festival_list.xml | 16 +++++ .../src/main/res/layout/fragment_my_page.xml | 16 +++++ .../main/res/layout/fragment_ticket_list.xml | 16 +++++ .../main/res/menu/menu_bottom_navigation.xml | 21 +++++++ .../app/src/main/res/values/strings.xml | 5 ++ 15 files changed, 273 insertions(+), 5 deletions(-) create mode 100644 android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/HomeActivity.kt create mode 100644 android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/HomeItemType.kt create mode 100644 android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/festivallist/FestivalListFragment.kt create mode 100644 android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/mypage/MyPageFragment.kt create mode 100644 android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/ticketlist/TicketListFragment.kt create mode 100644 android/festago/app/src/main/res/drawable/ic_bottom_navigation_festival.xml create mode 100644 android/festago/app/src/main/res/drawable/ic_bottom_navigation_user.xml create mode 100644 android/festago/app/src/main/res/layout/activity_home.xml create mode 100644 android/festago/app/src/main/res/layout/fragment_festival_list.xml create mode 100644 android/festago/app/src/main/res/layout/fragment_my_page.xml create mode 100644 android/festago/app/src/main/res/layout/fragment_ticket_list.xml create mode 100644 android/festago/app/src/main/res/menu/menu_bottom_navigation.xml diff --git a/android/festago/app/src/main/AndroidManifest.xml b/android/festago/app/src/main/AndroidManifest.xml index 106bd5e0d..01e09ec2f 100644 --- a/android/festago/app/src/main/AndroidManifest.xml +++ b/android/festago/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools"> + - @@ -26,6 +24,12 @@ + + diff --git a/android/festago/app/src/main/java/com/festago/festago/presentation/ui/MainViewModel.kt b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/MainViewModel.kt index 0e2ec5e97..13d11cd9b 100644 --- a/android/festago/app/src/main/java/com/festago/festago/presentation/ui/MainViewModel.kt +++ b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/MainViewModel.kt @@ -37,7 +37,7 @@ class MainViewModel( fun loadTicket() { viewModelScope.launch(exceptionHandler) { - _ticket.postValue(ticketRepository.loadTicket(0L).toPresentation()) + _ticket.postValue(ticketRepository.loadTicket(9L).toPresentation()) } } diff --git a/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/HomeActivity.kt b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/HomeActivity.kt new file mode 100644 index 000000000..584534f85 --- /dev/null +++ b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/HomeActivity.kt @@ -0,0 +1,59 @@ +package com.festago.festago.presentation.ui.home + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import com.festago.festago.R +import com.festago.festago.databinding.ActivityHomeBinding +import com.festago.festago.presentation.ui.home.festivallist.FestivalListFragment +import com.festago.festago.presentation.ui.home.mypage.MyPageFragment +import com.festago.festago.presentation.ui.home.ticketlist.TicketListFragment + +class HomeActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val binding = ActivityHomeBinding.inflate(layoutInflater) + setContentView(binding.root) + + binding.bnvHome.setOnItemSelectedListener { + when (getItemType(it.itemId)) { + HomeItemType.FESTIVAL_LIST -> changeFragment() + HomeItemType.TICKET_LIST -> changeFragment() + HomeItemType.MY_PAGE -> changeFragment() + } + true + } + + changeFragment() + } + + private fun getItemType(menuItemId: Int): HomeItemType { + return when (menuItemId) { + R.id.item_festival -> HomeItemType.FESTIVAL_LIST + R.id.item_mypage -> HomeItemType.MY_PAGE + R.id.item_ticket -> HomeItemType.TICKET_LIST + else -> throw IllegalArgumentException("menu item id not found") + } + } + + private inline fun changeFragment() { + val tag = T::class.java.name + val fragmentTransaction = supportFragmentManager.beginTransaction() + + supportFragmentManager.fragments.forEach { fragment -> + fragmentTransaction.hide(fragment) + } + + var targetFragment = supportFragmentManager.findFragmentByTag(tag) + + if (targetFragment == null) { + targetFragment = T::class.java.newInstance() + fragmentTransaction.add(R.id.fcv_home_container, targetFragment, tag) + } else { + fragmentTransaction.show(targetFragment) + } + + fragmentTransaction.commit() + } +} diff --git a/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/HomeItemType.kt b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/HomeItemType.kt new file mode 100644 index 000000000..4c4ff6d7b --- /dev/null +++ b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/HomeItemType.kt @@ -0,0 +1,7 @@ +package com.festago.festago.presentation.ui.home + +enum class HomeItemType { + FESTIVAL_LIST, + TICKET_LIST, + MY_PAGE, +} diff --git a/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/festivallist/FestivalListFragment.kt b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/festivallist/FestivalListFragment.kt new file mode 100644 index 000000000..9e4642002 --- /dev/null +++ b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/festivallist/FestivalListFragment.kt @@ -0,0 +1,29 @@ +package com.festago.festago.presentation.ui.home.festivallist + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.festago.festago.R +import com.festago.festago.databinding.FragmentFestivalListBinding + +class FestivalListFragment : Fragment(R.layout.fragment_festival_list) { + + private var _binding: FragmentFestivalListBinding? = null + private val binding get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?, + ): View { + _binding = FragmentFestivalListBinding.inflate(inflater) + return binding.root + } + + override fun onDestroyView() { + _binding = null + super.onDestroyView() + } +} diff --git a/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/mypage/MyPageFragment.kt b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/mypage/MyPageFragment.kt new file mode 100644 index 000000000..11df5d621 --- /dev/null +++ b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/mypage/MyPageFragment.kt @@ -0,0 +1,29 @@ +package com.festago.festago.presentation.ui.home.mypage + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.festago.festago.R +import com.festago.festago.databinding.FragmentMyPageBinding + +class MyPageFragment : Fragment(R.layout.fragment_my_page) { + + private var _binding: FragmentMyPageBinding? = null + private val binding get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?, + ): View { + _binding = FragmentMyPageBinding.inflate(inflater) + return binding.root + } + + override fun onDestroyView() { + _binding = null + super.onDestroyView() + } +} diff --git a/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/ticketlist/TicketListFragment.kt b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/ticketlist/TicketListFragment.kt new file mode 100644 index 000000000..903ed145c --- /dev/null +++ b/android/festago/app/src/main/java/com/festago/festago/presentation/ui/home/ticketlist/TicketListFragment.kt @@ -0,0 +1,29 @@ +package com.festago.festago.presentation.ui.home.ticketlist + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.festago.festago.R +import com.festago.festago.databinding.FragmentTicketListBinding + +class TicketListFragment : Fragment(R.layout.fragment_ticket_list) { + + private var _binding: FragmentTicketListBinding? = null + private val binding get() = _binding!! + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle?, + ): View { + _binding = FragmentTicketListBinding.inflate(inflater) + return binding.root + } + + override fun onDestroyView() { + _binding = null + super.onDestroyView() + } +} diff --git a/android/festago/app/src/main/res/drawable/ic_bottom_navigation_festival.xml b/android/festago/app/src/main/res/drawable/ic_bottom_navigation_festival.xml new file mode 100644 index 000000000..9edf2ad7c --- /dev/null +++ b/android/festago/app/src/main/res/drawable/ic_bottom_navigation_festival.xml @@ -0,0 +1,5 @@ + + + diff --git a/android/festago/app/src/main/res/drawable/ic_bottom_navigation_user.xml b/android/festago/app/src/main/res/drawable/ic_bottom_navigation_user.xml new file mode 100644 index 000000000..bd8dc808f --- /dev/null +++ b/android/festago/app/src/main/res/drawable/ic_bottom_navigation_user.xml @@ -0,0 +1,5 @@ + + + diff --git a/android/festago/app/src/main/res/layout/activity_home.xml b/android/festago/app/src/main/res/layout/activity_home.xml new file mode 100644 index 000000000..45ad4cb2d --- /dev/null +++ b/android/festago/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + diff --git a/android/festago/app/src/main/res/layout/fragment_festival_list.xml b/android/festago/app/src/main/res/layout/fragment_festival_list.xml new file mode 100644 index 000000000..b803ce0d0 --- /dev/null +++ b/android/festago/app/src/main/res/layout/fragment_festival_list.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/android/festago/app/src/main/res/layout/fragment_my_page.xml b/android/festago/app/src/main/res/layout/fragment_my_page.xml new file mode 100644 index 000000000..b05c9947a --- /dev/null +++ b/android/festago/app/src/main/res/layout/fragment_my_page.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/android/festago/app/src/main/res/layout/fragment_ticket_list.xml b/android/festago/app/src/main/res/layout/fragment_ticket_list.xml new file mode 100644 index 000000000..06f9b8d17 --- /dev/null +++ b/android/festago/app/src/main/res/layout/fragment_ticket_list.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/android/festago/app/src/main/res/menu/menu_bottom_navigation.xml b/android/festago/app/src/main/res/menu/menu_bottom_navigation.xml new file mode 100644 index 000000000..6689bfc70 --- /dev/null +++ b/android/festago/app/src/main/res/menu/menu_bottom_navigation.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/android/festago/app/src/main/res/values/strings.xml b/android/festago/app/src/main/res/values/strings.xml index c147dabdb..fcc73bde3 100644 --- a/android/festago/app/src/main/res/values/strings.xml +++ b/android/festago/app/src/main/res/values/strings.xml @@ -21,4 +21,9 @@ 입장 전 입장 완료 외출중 + + + 축제 목록 + 티켓 목록 + 마이페이지