Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.example.spoteam_android.ui.study

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextView
import com.example.spoteam_android.R
import com.example.spoteam_android.databinding.SpinnerDropdownItemBinding

class FixedRoundedSpinnerAdapter(
context: Context,
private val items: List<String>
) : ArrayAdapter<String>(context, R.layout.spinner_item, items) {

override fun getDropDownView(position: Int, convertView: android.view.View?, parent: ViewGroup): android.view.View {
val binding = SpinnerDropdownItemBinding.inflate(LayoutInflater.from(context), parent, false)

binding.spinnerText.text = items[position]

val background = when (position) {
0 -> R.drawable.spinner_item_top
items.size - 1 -> R.drawable.spinner_item_bottom
else -> R.drawable.spinner_item_middle
}

binding.itemContainer.setBackgroundResource(background)
return binding.root
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,44 +16,51 @@ class MemberNumberRVAdapter(
private var selectedPosition: Int = 0
var onItemClick: ((position: Int) -> Unit)? = null

inner class ViewHolder(val textView: TextView) : RecyclerView.ViewHolder(textView) {
inner class ViewHolder(view: ViewGroup) : RecyclerView.ViewHolder(view) {
val textView: TextView = view.findViewById(R.id.tv_member_number)

init {
textView.setOnClickListener {
onItemClick?.invoke(bindingAdapterPosition)
}
}
}


fun getSelectedNumber(): Int {
return items.getOrNull(selectedPosition) ?: 0
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_member_number, parent, false) as TextView
return ViewHolder(view)
.inflate(R.layout.item_member_number, parent, false)

val itemWidth = parent.context.resources.displayMetrics.widthPixels / 5
view.layoutParams = RecyclerView.LayoutParams(itemWidth, ViewGroup.LayoutParams.WRAP_CONTENT)

return ViewHolder(view as ViewGroup)
}





override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val number = items[position]
val context = holder.itemView.context
val typefaceBold = ResourcesCompat.getFont(context, R.font.suit_bold)
val typefaceRegular = ResourcesCompat.getFont(context, R.font.suit_variable)


holder.textView.text = number.toString()

if (position == selectedPosition) {
holder.textView.setTextColor(Color.BLACK)
holder.textView.textSize = 24f
holder.textView.typeface = typefaceBold
holder.textView.setBackgroundResource(R.drawable.page_bg)
} else {
holder.textView.setTextColor(Color.GRAY)
holder.textView.textSize = 24f
holder.textView.typeface = typefaceRegular
holder.textView.setBackgroundColor(Color.TRANSPARENT)
}
}



override fun getItemCount(): Int = items.size

fun setSelectedPosition(position: Int) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import androidx.recyclerview.widget.LinearSnapHelper
import androidx.recyclerview.widget.RecyclerView
import com.example.spoteam_android.R
import com.example.spoteam_android.databinding.FragmentMemberStudyBinding
import com.example.spoteam_android.ui.study.FixedRoundedSpinnerAdapter
import com.example.spoteam_android.ui.study.MemberNumberRVAdapter
import com.example.spoteam_android.ui.study.OnlineStudyFragment

Expand All @@ -35,55 +36,43 @@ class MemberStudyFragment : Fragment() {
goToPreviusFragment()
}

val numbers = (0..9).toList()
val numbers = (1..9).toList()
memberAdapter = MemberNumberRVAdapter(numbers)
val snapHelper = LinearSnapHelper()
snapHelper.attachToRecyclerView(binding.rvMemberStudyNum)




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


memberAdapter.onItemClick = { position ->
binding.rvMemberStudyNum.smoothScrollToPosition(position)

val selectedNumber = numbers[position]
smoothScrollToCenter(position)
memberAdapter.setSelectedPosition(position)
binding.selectedNumberText.text = "${String.format("%02d", selectedNumber)}명"
binding.selectedNumberText.text = "${String.format("%02d", numbers[position])}명"
binding.fragmentMemberStudyBt.isEnabled = true
}









return binding.root
}


private fun setupSpinners() {
// 참여 인원 Spinner 설정
// 성별 Spinner 설정
val genderSpinner: Spinner = binding.fragmentMemberStudyGenderSpinner
val genderAdapter = ArrayAdapter.createFromResource(
requireContext(),
R.array.gender_array,
R.layout.spinner_item
)
genderAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item)
genderSpinner.adapter = genderAdapter
val genderList = listOf("누구나", "남성", "여성")
val genderAdapter = FixedRoundedSpinnerAdapter(requireContext(), genderList)
binding.fragmentMemberStudyGenderSpinner.adapter = genderAdapter
}

// private fun setupSpinners() {
// val context = requireContext()
//
// // 참여 인원 Spinner 설정
// val numSpinner: Spinner = binding.fragmentMemberStudyNumSpinner
// val numItems = resources.getStringArray(R.array.fragment_study_num_spinner_array).toList()
// val numAdapter = CustomSpinnerAdapter(context, numItems)
// numSpinner.adapter = numAdapter
//
// // 성별 Spinner 설정
// val genderSpinner: Spinner = binding.fragmentMemberStudyGenderSpinner
// val genderItems = resources.getStringArray(R.array.gender_array).toList()
// val genderAdapter = CustomSpinnerAdapter(context, genderItems)
// genderSpinner.adapter = genderAdapter
// }


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

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

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

}

// private fun updateNextButtonState() {
// val isChecked = binding.
//
// if (isOnline) {
// binding.fragmentOnlineStudyBt.isEnabled = true
// binding.fragmentOnlineStudyBt.visibility = View.VISIBLE
// binding.fragmentOnlineStudyLocationPlusBt.visibility = View.GONE
// } else {
// if (hasChip) {
// binding.fragmentOnlineStudyBt.isEnabled = true
// binding.fragmentOnlineStudyBt.visibility = View.VISIBLE
// binding.fragmentOnlineStudyLocationPlusBt.visibility = View.GONE
// } else {
// binding.fragmentOnlineStudyBt.isEnabled = false
// binding.fragmentOnlineStudyBt.visibility = View.GONE
// binding.fragmentOnlineStudyLocationPlusBt.visibility = View.VISIBLE
// }
// }
// }

private fun goToNextFragment() {
val transaction = parentFragmentManager.beginTransaction()
transaction.replace(R.id.main_frm, ActivityFeeStudyFragment())
Expand All @@ -148,4 +156,26 @@ class MemberStudyFragment : Fragment() {
transaction.addToBackStack(null) // 백스택에 추가
transaction.commit()
}
private fun smoothScrollToCenter(position: Int) {
val layoutManager = binding.rvMemberStudyNum.layoutManager as LinearLayoutManager
val view = layoutManager.findViewByPosition(position)
if (view != null) {
val rvCenterX = binding.rvMemberStudyNum.width / 2
val viewCenterX = view.left + view.width / 2
val scrollBy = viewCenterX - rvCenterX
binding.rvMemberStudyNum.smoothScrollBy(scrollBy, 0)
} else {
binding.rvMemberStudyNum.scrollToPosition(position)
binding.rvMemberStudyNum.post {
val v = layoutManager.findViewByPosition(position)
v?.let {
val rvCenterX = binding.rvMemberStudyNum.width / 2
val viewCenterX = it.left + it.width / 2
val scrollBy = viewCenterX - rvCenterX
binding.rvMemberStudyNum.smoothScrollBy(scrollBy, 0)
}
}
}
}

}
Loading