Skip to content

Commit 7bfd79d

Browse files
authored
Merge pull request #247 from SPOTeam/SPOT-245/feat
[SPOT-245][FIX] 스터디 온라인 오프라인 여부 수정
2 parents 6704cdd + 9fdb353 commit 7bfd79d

15 files changed

+509
-363
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.example.spoteam_android.ui.study
2+
3+
import android.content.Context
4+
import android.view.LayoutInflater
5+
import android.view.View
6+
import android.view.ViewGroup
7+
import android.widget.ArrayAdapter
8+
import android.widget.TextView
9+
import com.example.spoteam_android.R
10+
import com.example.spoteam_android.databinding.SpinnerDropdownItemBinding
11+
12+
class FixedRoundedSpinnerAdapter(
13+
context: Context,
14+
private val items: List<String>
15+
) : ArrayAdapter<String>(context, R.layout.spinner_item, items) {
16+
17+
override fun getDropDownView(position: Int, convertView: android.view.View?, parent: ViewGroup): android.view.View {
18+
val binding = SpinnerDropdownItemBinding.inflate(LayoutInflater.from(context), parent, false)
19+
20+
binding.spinnerText.text = items[position]
21+
22+
val background = when (position) {
23+
0 -> R.drawable.spinner_item_top
24+
items.size - 1 -> R.drawable.spinner_item_bottom
25+
else -> R.drawable.spinner_item_middle
26+
}
27+
28+
binding.itemContainer.setBackgroundResource(background)
29+
return binding.root
30+
}
31+
}

SPOTeam_android/app/src/main/java/com/example/spoteam_android/ui/study/MemberNumberRVAdapter.kt

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,44 +16,51 @@ class MemberNumberRVAdapter(
1616
private var selectedPosition: Int = 0
1717
var onItemClick: ((position: Int) -> Unit)? = null
1818

19-
inner class ViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView) {
19+
inner class ViewHolder(view: ViewGroup) : RecyclerView.ViewHolder(view) {
20+
val textView: TextView = view.findViewById(R.id.tv_member_number)
21+
2022
init {
2123
textView.setOnClickListener {
2224
onItemClick?.invoke(bindingAdapterPosition)
2325
}
2426
}
2527
}
2628

29+
2730
fun getSelectedNumber(): Int {
2831
return items.getOrNull(selectedPosition) ?: 0
2932
}
3033

3134
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
3235
val view = LayoutInflater.from(parent.context)
33-
.inflate(R.layout.item_member_number, parent, false) as TextView
34-
return ViewHolder(view)
36+
.inflate(R.layout.item_member_number, parent, false)
37+
38+
val itemWidth = parent.context.resources.displayMetrics.widthPixels / 5
39+
view.layoutParams = RecyclerView.LayoutParams(itemWidth, ViewGroup.LayoutParams.WRAP_CONTENT)
40+
41+
return ViewHolder(view as ViewGroup)
3542
}
3643

44+
45+
46+
47+
3748
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
3849
val number = items[position]
3950
val context = holder.itemView.context
4051
val typefaceBold = ResourcesCompat.getFont(context, R.font.suit_bold)
41-
val typefaceRegular = ResourcesCompat.getFont(context, R.font.suit_variable)
42-
4352

4453
holder.textView.text = number.toString()
4554

4655
if (position == selectedPosition) {
47-
holder.textView.setTextColor(Color.BLACK)
48-
holder.textView.textSize = 24f
49-
holder.textView.typeface = typefaceBold
56+
holder.textView.setBackgroundResource(R.drawable.page_bg)
5057
} else {
51-
holder.textView.setTextColor(Color.GRAY)
52-
holder.textView.textSize = 24f
53-
holder.textView.typeface = typefaceRegular
58+
holder.textView.setBackgroundColor(Color.TRANSPARENT)
5459
}
5560
}
5661

62+
63+
5764
override fun getItemCount(): Int = items.size
5865

5966
fun setSelectedPosition(position: Int) {

SPOTeam_android/app/src/main/java/com/example/spoteam_android/ui/study/MemberStudyFragment.kt

Lines changed: 61 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.recyclerview.widget.LinearSnapHelper
1111
import androidx.recyclerview.widget.RecyclerView
1212
import com.example.spoteam_android.R
1313
import com.example.spoteam_android.databinding.FragmentMemberStudyBinding
14+
import com.example.spoteam_android.ui.study.FixedRoundedSpinnerAdapter
1415
import com.example.spoteam_android.ui.study.MemberNumberRVAdapter
1516
import com.example.spoteam_android.ui.study.OnlineStudyFragment
1617

@@ -35,55 +36,43 @@ class MemberStudyFragment : Fragment() {
3536
goToPreviusFragment()
3637
}
3738

38-
val numbers = (0..9).toList()
39+
val numbers = (1..9).toList()
3940
memberAdapter = MemberNumberRVAdapter(numbers)
41+
val snapHelper = LinearSnapHelper()
42+
snapHelper.attachToRecyclerView(binding.rvMemberStudyNum)
43+
44+
4045

4146

4247
binding.rvMemberStudyNum.adapter = memberAdapter
4348
binding.rvMemberStudyNum.layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
4449

4550

4651
memberAdapter.onItemClick = { position ->
47-
binding.rvMemberStudyNum.smoothScrollToPosition(position)
48-
49-
val selectedNumber = numbers[position]
52+
smoothScrollToCenter(position)
5053
memberAdapter.setSelectedPosition(position)
51-
binding.selectedNumberText.text = "${String.format("%02d", selectedNumber)}"
54+
binding.selectedNumberText.text = "${String.format("%02d", numbers[position])}"
55+
binding.fragmentMemberStudyBt.isEnabled = true
5256
}
5357

5458

5559

60+
61+
62+
63+
64+
65+
5666
return binding.root
5767
}
5868

69+
5970
private fun setupSpinners() {
60-
// 참여 인원 Spinner 설정
61-
// 성별 Spinner 설정
62-
val genderSpinner: Spinner = binding.fragmentMemberStudyGenderSpinner
63-
val genderAdapter = ArrayAdapter.createFromResource(
64-
requireContext(),
65-
R.array.gender_array,
66-
R.layout.spinner_item
67-
)
68-
genderAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item)
69-
genderSpinner.adapter = genderAdapter
71+
val genderList = listOf("누구나", "남성", "여성")
72+
val genderAdapter = FixedRoundedSpinnerAdapter(requireContext(), genderList)
73+
binding.fragmentMemberStudyGenderSpinner.adapter = genderAdapter
7074
}
7175

72-
// private fun setupSpinners() {
73-
// val context = requireContext()
74-
//
75-
// // 참여 인원 Spinner 설정
76-
// val numSpinner: Spinner = binding.fragmentMemberStudyNumSpinner
77-
// val numItems = resources.getStringArray(R.array.fragment_study_num_spinner_array).toList()
78-
// val numAdapter = CustomSpinnerAdapter(context, numItems)
79-
// numSpinner.adapter = numAdapter
80-
//
81-
// // 성별 Spinner 설정
82-
// val genderSpinner: Spinner = binding.fragmentMemberStudyGenderSpinner
83-
// val genderItems = resources.getStringArray(R.array.gender_array).toList()
84-
// val genderAdapter = CustomSpinnerAdapter(context, genderItems)
85-
// genderSpinner.adapter = genderAdapter
86-
// }
8776

8877

8978
private fun setupRangeSlider() {
@@ -117,7 +106,6 @@ class MemberStudyFragment : Fragment() {
117106
val minAge = ageRangeSlider.values[0].toInt()
118107
val maxAge = ageRangeSlider.values[1].toInt()
119108

120-
// profileImage를 ViewModel에서 가져오는 예시
121109
val profileImage = viewModel.studyRequest.value?.profileImage
122110

123111
viewModel.setStudyData(
@@ -136,6 +124,26 @@ class MemberStudyFragment : Fragment() {
136124

137125
}
138126

127+
// private fun updateNextButtonState() {
128+
// val isChecked = binding.
129+
//
130+
// if (isOnline) {
131+
// binding.fragmentOnlineStudyBt.isEnabled = true
132+
// binding.fragmentOnlineStudyBt.visibility = View.VISIBLE
133+
// binding.fragmentOnlineStudyLocationPlusBt.visibility = View.GONE
134+
// } else {
135+
// if (hasChip) {
136+
// binding.fragmentOnlineStudyBt.isEnabled = true
137+
// binding.fragmentOnlineStudyBt.visibility = View.VISIBLE
138+
// binding.fragmentOnlineStudyLocationPlusBt.visibility = View.GONE
139+
// } else {
140+
// binding.fragmentOnlineStudyBt.isEnabled = false
141+
// binding.fragmentOnlineStudyBt.visibility = View.GONE
142+
// binding.fragmentOnlineStudyLocationPlusBt.visibility = View.VISIBLE
143+
// }
144+
// }
145+
// }
146+
139147
private fun goToNextFragment() {
140148
val transaction = parentFragmentManager.beginTransaction()
141149
transaction.replace(R.id.main_frm, ActivityFeeStudyFragment())
@@ -148,4 +156,26 @@ class MemberStudyFragment : Fragment() {
148156
transaction.addToBackStack(null) // 백스택에 추가
149157
transaction.commit()
150158
}
159+
private fun smoothScrollToCenter(position: Int) {
160+
val layoutManager = binding.rvMemberStudyNum.layoutManager as LinearLayoutManager
161+
val view = layoutManager.findViewByPosition(position)
162+
if (view != null) {
163+
val rvCenterX = binding.rvMemberStudyNum.width / 2
164+
val viewCenterX = view.left + view.width / 2
165+
val scrollBy = viewCenterX - rvCenterX
166+
binding.rvMemberStudyNum.smoothScrollBy(scrollBy, 0)
167+
} else {
168+
binding.rvMemberStudyNum.scrollToPosition(position)
169+
binding.rvMemberStudyNum.post {
170+
val v = layoutManager.findViewByPosition(position)
171+
v?.let {
172+
val rvCenterX = binding.rvMemberStudyNum.width / 2
173+
val viewCenterX = it.left + it.width / 2
174+
val scrollBy = viewCenterX - rvCenterX
175+
binding.rvMemberStudyNum.smoothScrollBy(scrollBy, 0)
176+
}
177+
}
178+
}
179+
}
180+
151181
}

0 commit comments

Comments
 (0)