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 @@
입장 전
입장 완료
외출중
+
+
+ 축제 목록
+ 티켓 목록
+ 마이페이지