Skip to content

Commit

Permalink
#212 Add dining container view pager
Browse files Browse the repository at this point in the history
  • Loading branch information
wateralsie committed Apr 16, 2024
1 parent c826c8f commit 606aed2
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,13 @@ import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayoutMediator
import dagger.hilt.android.AndroidEntryPoint
import `in`.koreatech.koin.domain.model.dining.DiningPlace
import `in`.koreatech.koin.domain.util.DiningUtil
import `in`.koreatech.koin.domain.util.ext.arrange
import `in`.koreatech.koin.domain.util.ext.typeFilter
import `in`.koreatech.koin.ui.main.adapter.DiningContainerViewPager2Adapter
import `in`.koreatech.koin.ui.store.contract.StoreActivityContract

@AndroidEntryPoint
Expand All @@ -51,6 +54,7 @@ class MainActivity : KoinNavigationDrawerActivity() {
mainActivityViewModel.setSelectedPosition(it)
}
}
private val diningContainerAdapter by lazy { DiningContainerViewPager2Adapter(this) }

private val storeCategoryRecyclerAdapter = StoreCategoryRecyclerAdapter().apply {
setRecyclerViewClickListener(object : RecyclerViewClickListener {
Expand Down Expand Up @@ -118,9 +122,11 @@ class MainActivity : KoinNavigationDrawerActivity() {
// callDrawerItem(R.id.navi_item_dining)
// }

DiningUtil.diningPlace.forEach { place ->
tabDining.addTab(tabDining.newTab().setText(place))
}
pagerDiningContainer.adapter = diningContainerAdapter

TabLayoutMediator(tabDining, pagerDiningContainer) { tab, position ->
tab.text = DiningPlace.entries[position].place
}.attach()
}

private fun initViewModel() = with(mainActivityViewModel) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package `in`.koreatech.koin.ui.main.adapter

import android.util.SparseArray
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import `in`.koreatech.koin.domain.model.dining.DiningPlace
import `in`.koreatech.koin.ui.main.fragment.DiningContainerFragment

class DiningContainerViewPager2Adapter(
fragmentActivity: FragmentActivity
) : FragmentStateAdapter(fragmentActivity) {
private val fragments = SparseArray<Fragment>()

override fun getItemCount(): Int = 4

override fun createFragment(position: Int): Fragment {
return fragments[position] ?: when (position) {
0 -> DiningContainerFragment.newInstance(DiningPlace.CornerA.place)
1 -> DiningContainerFragment.newInstance(DiningPlace.CornerB.place)
2 -> DiningContainerFragment.newInstance(DiningPlace.CornerC.place)
3 -> DiningContainerFragment.newInstance(DiningPlace.Nungsu.place)
else -> throw IllegalArgumentException("Position must be lower than $itemCount")
}.also { fragments[position] = it }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package `in`.koreatech.koin.ui.main.fragment

import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import `in`.koreatech.koin.R
import `in`.koreatech.koin.core.util.dataBinding
import `in`.koreatech.koin.databinding.FragmentDiningContainerBinding
import `in`.koreatech.koin.ui.main.viewmodel.MainActivityViewModel

class DiningContainerFragment : Fragment(R.layout.fragment_dining_container) {
private val binding by dataBinding<FragmentDiningContainerBinding>()
private val viewModel by viewModels<MainActivityViewModel>()
private val place by lazy { arguments?.getString(PLACE) }

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

initView()
}

private fun initView() {
place.apply {
binding.textViewDiningContainer.text = this.toString()
}
}

companion object {
private const val PLACE = "place"
fun newInstance(place: String) =
DiningContainerFragment().apply {
arguments = Bundle().apply {
putString(PLACE, place)
}
}
}
}
5 changes: 5 additions & 0 deletions koin/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,11 @@
android:layout_height="1dp"
android:background="#E1E1E1" />

<androidx.viewpager2.widget.ViewPager2
android:id="@+id/pager_dining_container"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>
</androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
Expand Down
25 changes: 25 additions & 0 deletions koin/src/main/res/layout/fragment_dining_container.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<data>

</data>

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.fragment.DiningContainerFragment">

<TextView
android:id="@+id/text_view_dining_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="어디야??" />

</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

0 comments on commit 606aed2

Please sign in to comment.