From d834ca342df4c7803045e7d6437e14aa5e0e7f1d Mon Sep 17 00:00:00 2001 From: jeong724 Date: Wed, 26 Jun 2024 16:38:33 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[fix]=20=EB=A9=94=EC=84=B8=EC=A7=80=20?= =?UTF-8?q?=EC=98=86=20=EB=B2=84=ED=8A=BC=20=EC=83=89=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../toyou/toyouandroid/ui/home/adapter/CardAdapter.kt | 9 +++++---- app/src/main/res/drawable/create_selector_btn.xml | 4 ++-- app/src/main/res/layout/item_rv_card.xml | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt index dc10886b..00c89fde 100644 --- a/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt @@ -33,22 +33,23 @@ class CardAdapter(private val onItemClick: (Int) -> Unit) : RecyclerView.Adapter class CardViewHolder(itemView: View, onItemClick: (Int) -> Unit) : RecyclerView.ViewHolder(itemView){ private val cardMessageTextView : TextView = itemView.findViewById(R.id.textMessage) private val button : Button = itemView.findViewById(R.id.button) + private var isSelected: Boolean = false init { button.setOnClickListener { + updateButtonBackground(isSelected) onItemClick(adapterPosition) - button.isEnabled != button.isEnabled + isSelected = !isSelected } } fun bind(card : CardModel){ cardMessageTextView.text = card.message - updateButtonBackground(button.isEnabled) } - private fun updateButtonBackground(isEnabled: Boolean) { - val backgroundRes = if (isEnabled) R.drawable.create_unclicked_btn else R.drawable.create_clicked_btn + private fun updateButtonBackground(isSelected: Boolean) { + val backgroundRes = if (isSelected) R.drawable.create_clicked_btn else R.drawable.create_unclicked_btn button.setBackgroundResource(backgroundRes) } diff --git a/app/src/main/res/drawable/create_selector_btn.xml b/app/src/main/res/drawable/create_selector_btn.xml index aced9bfb..9a4eb491 100644 --- a/app/src/main/res/drawable/create_selector_btn.xml +++ b/app/src/main/res/drawable/create_selector_btn.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_rv_card.xml b/app/src/main/res/layout/item_rv_card.xml index bf0d701c..ee893968 100644 --- a/app/src/main/res/layout/item_rv_card.xml +++ b/app/src/main/res/layout/item_rv_card.xml @@ -9,7 +9,7 @@ android:id="@+id/button" android:layout_width="10dp" android:layout_height="10dp" - android:background="@drawable/create_selector_btn" + android:background="@drawable/create_clicked_btn" app:layout_constraintBottom_toBottomOf="@+id/textMessage" app:layout_constraintTop_toTopOf="@+id/textMessage" /> From 27b39710887f4c085c00d9bf19ede0cb41ce1fa7 Mon Sep 17 00:00:00 2001 From: jeong724 Date: Wed, 26 Jun 2024 18:47:11 +0900 Subject: [PATCH 2/4] =?UTF-8?q?[feat]=20=EB=B0=94=ED=85=80=20=EB=84=A4?= =?UTF-8?q?=EB=B9=84=20=EC=88=A8=EA=B8=B0=EA=B8=B0=20+=20=EC=9D=B4?= =?UTF-8?q?=EC=A0=84=20=EB=B2=84=ED=8A=BC=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/toyou/toyouandroid/MainActivity.kt | 9 +++++- .../com/toyou/toyouandroid/model/CardModel.kt | 5 +++- .../toyouandroid/ui/home/CreateFragment.kt | 29 +++++++++++++++++-- .../toyouandroid/ui/home/HomeFragment.kt | 23 +++++++++++---- .../ui/home/adapter/CardAdapter.kt | 7 +++-- .../toyouandroid/view_model/CardViewModel.kt | 10 +++++++ app/src/main/res/layout/fragment_create.xml | 5 ++-- app/src/main/res/layout/fragment_home.xml | 5 ++-- app/src/main/res/layout/toolbar.xml | 16 ++++++++++ app/src/main/res/menu/bottom_navi_item.xml | 2 +- app/src/main/res/navigation/nav_graph.xml | 10 +++++-- 11 files changed, 101 insertions(+), 20 deletions(-) create mode 100644 app/src/main/res/layout/toolbar.xml diff --git a/app/src/main/java/com/toyou/toyouandroid/MainActivity.kt b/app/src/main/java/com/toyou/toyouandroid/MainActivity.kt index f2c32f19..05ee5e11 100644 --- a/app/src/main/java/com/toyou/toyouandroid/MainActivity.kt +++ b/app/src/main/java/com/toyou/toyouandroid/MainActivity.kt @@ -1,6 +1,7 @@ package com.toyou.toyouandroid import android.os.Bundle +import android.view.View import com.google.android.material.bottomnavigation.BottomNavigationView import androidx.appcompat.app.AppCompatActivity import androidx.navigation.findNavController @@ -16,7 +17,8 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment @@ -25,5 +27,10 @@ class MainActivity : AppCompatActivity() { findViewById(R.id.bottom_navi) .setupWithNavController(navController) + + } + + fun hideBottomNavigation(state:Boolean){ + if(state) binding.bottomNavi.visibility = View.GONE else binding.bottomNavi.visibility=View.VISIBLE } } \ No newline at end of file diff --git a/app/src/main/java/com/toyou/toyouandroid/model/CardModel.kt b/app/src/main/java/com/toyou/toyouandroid/model/CardModel.kt index ba561d0b..6502a7ae 100644 --- a/app/src/main/java/com/toyou/toyouandroid/model/CardModel.kt +++ b/app/src/main/java/com/toyou/toyouandroid/model/CardModel.kt @@ -1,3 +1,6 @@ package com.toyou.toyouandroid.model -data class CardModel(val message : String) +data class CardModel( + val message : String, + var isButtonSelected : Boolean = false +) diff --git a/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt b/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt index 54ba4974..e1e07ce4 100644 --- a/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt @@ -9,7 +9,11 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider +import androidx.navigation.NavController +import androidx.navigation.Navigation +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager +import com.toyou.toyouandroid.MainActivity import com.toyou.toyouandroid.R import com.toyou.toyouandroid.databinding.FragmentCreateBinding import com.toyou.toyouandroid.ui.home.adapter.CardAdapter @@ -23,6 +27,8 @@ class CreateFragment : Fragment(){ private lateinit var cardAdapter : CardAdapter private lateinit var cardViewModel: CardViewModel + lateinit var navController: NavController + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -37,8 +43,11 @@ class CreateFragment : Fragment(){ savedInstanceState: Bundle? ): View? { _binding = FragmentCreateBinding.inflate(inflater, container, false) - cardAdapter = CardAdapter { position -> + cardAdapter = CardAdapter { position, isSelected -> + cardViewModel.updateButtonState(position, isSelected) Log.d("CreateFragment", "Item clicked at position: $position") + Log.d("CreateFragment", "Item clicked at position: $isSelected, ${cardViewModel.cards.value}") + } //adapter = cardAdapter @@ -63,19 +72,35 @@ class CreateFragment : Fragment(){ Log.d("CreateFragment", "ViewModel created: ${cardViewModel}") // 로그 추가 cardViewModel.cards.observe(viewLifecycleOwner, Observer { cards -> - Log.d("CardViewModel", "Loading cards: $cards") // 디버그 로그 추가 + Log.d("CardViewModel", "Loading cards: ${cardViewModel.cards.value}") // 디버그 로그 추가 cardAdapter.setCards(cards) }) cardViewModel.loadCardData() + val mainActivity = activity as MainActivity // casting + mainActivity.hideBottomNavigation(true) + val root: View = binding.root return root } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + navController = Navigation.findNavController(view) + + binding.backBtn.setOnClickListener { + binding.backBtn.setOnClickListener { + navController.popBackStack() + } + } + + } + override fun onDestroyView() { super.onDestroyView() + val mainActivity = activity as MainActivity + mainActivity.hideBottomNavigation(false) _binding = null } diff --git a/app/src/main/java/com/toyou/toyouandroid/ui/home/HomeFragment.kt b/app/src/main/java/com/toyou/toyouandroid/ui/home/HomeFragment.kt index 7203df76..539d530d 100644 --- a/app/src/main/java/com/toyou/toyouandroid/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/ui/home/HomeFragment.kt @@ -7,12 +7,17 @@ import android.view.ViewGroup import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.navigation.NavController +import androidx.navigation.Navigation +import com.toyou.toyouandroid.R import com.toyou.toyouandroid.databinding.FragmentCreateBinding import com.toyou.toyouandroid.databinding.FragmentHomeBinding class HomeFragment : Fragment() { - private var _binding: FragmentCreateBinding? = null + lateinit var navController: NavController + + private var _binding: FragmentHomeBinding? = null // This property is only valid between onCreateView and // onDestroyView. @@ -26,16 +31,22 @@ class HomeFragment : Fragment() { val homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java) - _binding = FragmentCreateBinding.inflate(inflater, container, false) + _binding = FragmentHomeBinding.inflate(inflater, container, false) val root: View = binding.root - /*val textView: TextView = binding.textHome - homeViewModel.text.observe(viewLifecycleOwner) { - textView.text = it - }*/ return root } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + navController = Navigation.findNavController(view) + + binding.textHomeBtn.setOnClickListener { + navController.navigate(R.id.action_navigation_home_to_create_fragment) + } + } + + override fun onDestroyView() { super.onDestroyView() _binding = null diff --git a/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt index 00c89fde..c0bd7cd7 100644 --- a/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt @@ -10,7 +10,7 @@ import androidx.recyclerview.widget.RecyclerView import com.toyou.toyouandroid.R import com.toyou.toyouandroid.model.CardModel -class CardAdapter(private val onItemClick: (Int) -> Unit) : RecyclerView.Adapter() { +class CardAdapter(private val onItemClick: (Int, Boolean) -> Unit) : RecyclerView.Adapter() { private var cardList: List = emptyList() fun setCards(cards : List){ @@ -30,7 +30,7 @@ class CardAdapter(private val onItemClick: (Int) -> Unit) : RecyclerView.Adapter override fun getItemCount(): Int = cardList.size - class CardViewHolder(itemView: View, onItemClick: (Int) -> Unit) : RecyclerView.ViewHolder(itemView){ + class CardViewHolder(itemView: View, onItemClick: (Int, Boolean) -> Unit) : RecyclerView.ViewHolder(itemView){ private val cardMessageTextView : TextView = itemView.findViewById(R.id.textMessage) private val button : Button = itemView.findViewById(R.id.button) private var isSelected: Boolean = false @@ -39,7 +39,7 @@ class CardAdapter(private val onItemClick: (Int) -> Unit) : RecyclerView.Adapter init { button.setOnClickListener { updateButtonBackground(isSelected) - onItemClick(adapterPosition) + onItemClick(adapterPosition, isSelected) isSelected = !isSelected } } @@ -47,6 +47,7 @@ class CardAdapter(private val onItemClick: (Int) -> Unit) : RecyclerView.Adapter fun bind(card : CardModel){ cardMessageTextView.text = card.message + card.isButtonSelected = isSelected } private fun updateButtonBackground(isSelected: Boolean) { val backgroundRes = if (isSelected) R.drawable.create_clicked_btn else R.drawable.create_unclicked_btn diff --git a/app/src/main/java/com/toyou/toyouandroid/view_model/CardViewModel.kt b/app/src/main/java/com/toyou/toyouandroid/view_model/CardViewModel.kt index 4b6040ec..d331c5d7 100644 --- a/app/src/main/java/com/toyou/toyouandroid/view_model/CardViewModel.kt +++ b/app/src/main/java/com/toyou/toyouandroid/view_model/CardViewModel.kt @@ -25,4 +25,14 @@ class CardViewModel : ViewModel(){ _cards.value = sampleCards } + + fun updateButtonState(position : Int, isSelected : Boolean){ + _cards.value = _cards.value?.mapIndexed { index, card -> + if (index == position) { + card.copy(isButtonSelected = isSelected) + } else { + card + } + } + } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_create.xml b/app/src/main/res/layout/fragment_create.xml index cca56f3b..afa909a1 100644 --- a/app/src/main/res/layout/fragment_create.xml +++ b/app/src/main/res/layout/fragment_create.xml @@ -4,6 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + - + - + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_navi_item.xml b/app/src/main/res/menu/bottom_navi_item.xml index 45f5d892..847fa9ef 100644 --- a/app/src/main/res/menu/bottom_navi_item.xml +++ b/app/src/main/res/menu/bottom_navi_item.xml @@ -2,7 +2,7 @@ diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 09f79513..668fd8ea 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -10,7 +10,12 @@ android:id="@+id/navigation_home" android:name="com.toyou.toyouandroid.ui.home.HomeFragment" android:label="fragment_home" - tools:layout="@layout/fragment_home" /> + tools:layout="@layout/fragment_home" > + + + tools:layout="@layout/fragment_create"> + \ No newline at end of file From cb6faef102a0cfa596ed1f348b1aaa86dc56edfb Mon Sep 17 00:00:00 2001 From: jeong724 Date: Wed, 26 Jun 2024 19:18:50 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[feat]=20=EB=B2=84=ED=8A=BC=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/toyou/toyouandroid/model/CardModel.kt | 2 +- .../toyouandroid/ui/home/CreateFragment.kt | 22 ++++++++++--------- .../ui/home/adapter/CardAdapter.kt | 4 ++-- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/toyou/toyouandroid/model/CardModel.kt b/app/src/main/java/com/toyou/toyouandroid/model/CardModel.kt index 6502a7ae..a3cd7ac5 100644 --- a/app/src/main/java/com/toyou/toyouandroid/model/CardModel.kt +++ b/app/src/main/java/com/toyou/toyouandroid/model/CardModel.kt @@ -3,4 +3,4 @@ package com.toyou.toyouandroid.model data class CardModel( val message : String, var isButtonSelected : Boolean = false -) +) \ No newline at end of file diff --git a/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt b/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt index e1e07ce4..ef4ca1fb 100644 --- a/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt @@ -43,15 +43,22 @@ class CreateFragment : Fragment(){ savedInstanceState: Bundle? ): View? { _binding = FragmentCreateBinding.inflate(inflater, container, false) + + cardViewModel.cards.observe(viewLifecycleOwner, Observer { cards -> + Log.d("CreateFragment", "Loading cards: ${cardViewModel.cards.value}") // 디버그 로그 추가 + cardAdapter.setCards(cards) + }) + cardAdapter = CardAdapter { position, isSelected -> cardViewModel.updateButtonState(position, isSelected) Log.d("CreateFragment", "Item clicked at position: $position") Log.d("CreateFragment", "Item clicked at position: $isSelected, ${cardViewModel.cards.value}") - } //adapter = cardAdapter + cardViewModel.loadCardData() + binding.cardRv.apply { layoutManager = LinearLayoutManager(requireContext()) @@ -66,17 +73,10 @@ class CreateFragment : Fragment(){ addItemDecoration(RVMarginItemDecoration(margin)) } + /*cardViewModel = ViewModelProvider(this).get(CardViewModel::class.java) + Log.d("CreateFragment", "ViewModel created: ${cardViewModel}") // 로그 추가*/ - cardViewModel = ViewModelProvider(this).get(CardViewModel::class.java) - Log.d("CreateFragment", "ViewModel created: ${cardViewModel}") // 로그 추가 - - cardViewModel.cards.observe(viewLifecycleOwner, Observer { cards -> - Log.d("CardViewModel", "Loading cards: ${cardViewModel.cards.value}") // 디버그 로그 추가 - cardAdapter.setCards(cards) - }) - - cardViewModel.loadCardData() val mainActivity = activity as MainActivity // casting mainActivity.hideBottomNavigation(true) @@ -95,6 +95,8 @@ class CreateFragment : Fragment(){ } } + + } override fun onDestroyView() { diff --git a/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt index c0bd7cd7..1d0e00aa 100644 --- a/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt @@ -39,15 +39,15 @@ class CardAdapter(private val onItemClick: (Int, Boolean) -> Unit) : RecyclerVie init { button.setOnClickListener { updateButtonBackground(isSelected) - onItemClick(adapterPosition, isSelected) isSelected = !isSelected + onItemClick(adapterPosition, isSelected) } } fun bind(card : CardModel){ cardMessageTextView.text = card.message - card.isButtonSelected = isSelected + //card.isButtonSelected = isSelected } private fun updateButtonBackground(isSelected: Boolean) { val backgroundRes = if (isSelected) R.drawable.create_clicked_btn else R.drawable.create_unclicked_btn From a5b037c82560ab2ff475e1e7027727744cc8a93d Mon Sep 17 00:00:00 2001 From: jeong724 Date: Wed, 26 Jun 2024 19:29:53 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[feat]=20=EC=A7=88=EB=AC=B8=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=20=EC=8B=9C=20=EB=8B=A4=EC=9D=8C=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=20=ED=99=9C=EC=84=B1=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/toyou/toyouandroid/ui/home/CreateFragment.kt | 12 ++++++------ .../toyouandroid/ui/home/adapter/CardAdapter.kt | 1 + app/src/main/res/layout/fragment_create.xml | 1 + 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt b/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt index ef4ca1fb..8a2cb126 100644 --- a/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt +++ b/app/src/main/java/com/toyou/toyouandroid/ui/home/CreateFragment.kt @@ -54,6 +54,12 @@ class CreateFragment : Fragment(){ Log.d("CreateFragment", "Item clicked at position: $position") Log.d("CreateFragment", "Item clicked at position: $isSelected, ${cardViewModel.cards.value}") + if (isSelected == true){ + binding.nextBtn.isEnabled = true + } else{ + binding.nextBtn.isEnabled = false + } + } //adapter = cardAdapter @@ -73,10 +79,6 @@ class CreateFragment : Fragment(){ addItemDecoration(RVMarginItemDecoration(margin)) } - /*cardViewModel = ViewModelProvider(this).get(CardViewModel::class.java) - Log.d("CreateFragment", "ViewModel created: ${cardViewModel}") // 로그 추가*/ - - val mainActivity = activity as MainActivity // casting mainActivity.hideBottomNavigation(true) @@ -95,8 +97,6 @@ class CreateFragment : Fragment(){ } } - - } override fun onDestroyView() { diff --git a/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt b/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt index 1d0e00aa..2192c5a5 100644 --- a/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt +++ b/app/src/main/java/com/toyou/toyouandroid/ui/home/adapter/CardAdapter.kt @@ -40,6 +40,7 @@ class CardAdapter(private val onItemClick: (Int, Boolean) -> Unit) : RecyclerVie button.setOnClickListener { updateButtonBackground(isSelected) isSelected = !isSelected + //버튼 클릭 업데이트 후 onItemClick 함수 호출하기! onItemClick(adapterPosition, isSelected) } } diff --git a/app/src/main/res/layout/fragment_create.xml b/app/src/main/res/layout/fragment_create.xml index afa909a1..0e696421 100644 --- a/app/src/main/res/layout/fragment_create.xml +++ b/app/src/main/res/layout/fragment_create.xml @@ -104,6 +104,7 @@