diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt index b1c395b9..87f5f11c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt @@ -3,14 +3,11 @@ package net.pokeranalytics.android.ui.activity import android.content.Context import android.content.Intent import android.os.Bundle -import androidx.fragment.app.Fragment import com.google.android.material.bottomnavigation.BottomNavigationView import kotlinx.android.synthetic.main.activity_home.* import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity -import net.pokeranalytics.android.ui.fragment.HistoryFragment -import net.pokeranalytics.android.ui.fragment.SettingsFragment -import net.pokeranalytics.android.ui.fragment.StatsFragment +import net.pokeranalytics.android.ui.adapter.HomePagerAdapter @@ -44,7 +41,7 @@ class HomeActivity : PokerAnalyticsActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setContentView(net.pokeranalytics.android.R.layout.activity_home) + setContentView(R.layout.activity_home) initUI() } @@ -55,6 +52,12 @@ class HomeActivity : PokerAnalyticsActivity() { private fun initUI() { navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener) navigation.selectedItemId = net.pokeranalytics.android.R.id.navigation_history + + val homePagerAdapter = HomePagerAdapter(supportFragmentManager) + viewPager.offscreenPageLimit = 5 + viewPager.enablePaging = false + viewPager.adapter = homePagerAdapter + } /** @@ -69,22 +72,7 @@ class HomeActivity : PokerAnalyticsActivity() { else -> "" } - val fragment: Fragment = when(index) { - 0 -> HistoryFragment() - 1 -> StatsFragment() - else -> SettingsFragment() - } - - val fragmentManager = supportFragmentManager - val count = fragmentManager.backStackEntryCount - for (i in 0 until count) { - fragmentManager.popBackStack() - } - - val fragmentTransaction = fragmentManager.beginTransaction() - fragmentTransaction.replace(net.pokeranalytics.android.R.id.container, fragment) - fragmentTransaction.commit() - + viewPager.setCurrentItem(index, false) } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt new file mode 100644 index 00000000..41cc6926 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HomePagerAdapter.kt @@ -0,0 +1,64 @@ +package net.pokeranalytics.android.ui.adapter + +import android.util.SparseArray +import android.view.ViewGroup +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentStatePagerAdapter +import net.pokeranalytics.android.ui.fragment.HistoryFragment +import net.pokeranalytics.android.ui.fragment.SettingsFragment +import net.pokeranalytics.android.ui.fragment.StatsFragment +import net.pokeranalytics.android.ui.fragment.components.PokerAnalyticsFragment +import java.lang.ref.WeakReference + +/** + * Home Adapter + */ +class HomePagerAdapter(fragmentManager: FragmentManager) : FragmentStatePagerAdapter(fragmentManager) { + + var weakReferences = SparseArray>() + + override fun getItem(position: Int): PokerAnalyticsFragment { + return when (position) { + 0 -> HistoryFragment.newInstance() + 1 -> StatsFragment.newInstance() + 2 -> SettingsFragment.newInstance() + else -> HistoryFragment.newInstance() + } + } + + override fun getCount(): Int { + return 5 + } + + override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) { + super.destroyItem(container, position, `object`) + weakReferences.remove(position) + } + + override fun instantiateItem(container: ViewGroup, position: Int): Any { + val fragment = super.instantiateItem(container, position) as PokerAnalyticsFragment + weakReferences.put(position, WeakReference(fragment)) + return fragment + } + + override fun getItemPosition(obj: Any): Int { + val fragment = obj as PokerAnalyticsFragment + return when (fragment) { + HistoryFragment::class.java -> 0 + StatsFragment::class.java -> 1 + SettingsFragment::class.java -> 2 + else -> -1 + } + } + + /** + * Return the fragment at the position key + */ + fun getFragment(key: Int): PokerAnalyticsFragment? { + if (weakReferences.get(key) != null) { + return weakReferences.get(key).get() + } + return null + } + +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt new file mode 100644 index 00000000..830ed374 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/PokerAnalyticsViewPager.kt @@ -0,0 +1,33 @@ +package net.pokeranalytics.android.ui.view + +import android.content.Context +import android.util.AttributeSet +import android.view.MotionEvent +import androidx.viewpager.widget.ViewPager + +/** + * Poker Analytics ViewPager + */ +class PokerAnalyticsViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) { + + var enablePaging: Boolean = false + + init { + this.enablePaging = false + } + + override fun onTouchEvent(event: MotionEvent): Boolean { + return if (this.enablePaging) { + super.onTouchEvent(event) + } else false + + } + + override fun onInterceptTouchEvent(event: MotionEvent): Boolean { + return if (this.enablePaging) { + super.onInterceptTouchEvent(event) + } else false + + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index a56b0b25..670ad70c 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -15,6 +15,7 @@ app:layout_constraintTop_toTopOf="parent" app:title="@string/app_name" /> + + +