Skip to content

Commit

Permalink
refactor(database): migrate to viewpager2 (#1315)
Browse files Browse the repository at this point in the history
  • Loading branch information
thatfiredev committed Jul 16, 2021
1 parent 165ef07 commit 25505d4
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 30 deletions.
Expand Up @@ -11,9 +11,10 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.navigation.fragment.NavHostFragment;
import androidx.viewpager2.adapter.FragmentStateAdapter;

import com.google.android.material.tabs.TabLayoutMediator;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.quickstart.database.R;
import com.google.firebase.quickstart.database.databinding.FragmentMainBinding;
Expand All @@ -38,37 +39,35 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
setHasOptionsMenu(true);

// Create the adapter that will return a fragment for each section
FragmentPagerAdapter mPagerAdapter = new FragmentPagerAdapter(getParentFragmentManager(),
FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
FragmentStateAdapter mPagerAdapter = new FragmentStateAdapter(getParentFragmentManager(),
getViewLifecycleOwner().getLifecycle()) {
private final Fragment[] mFragments = new Fragment[]{
new RecentPostsFragment(),
new MyPostsFragment(),
new MyTopPostsFragment(),
};
private final String[] mFragmentNames = new String[]{
getString(R.string.heading_recent),
getString(R.string.heading_my_posts),
getString(R.string.heading_my_top_posts)
};

@NonNull
@Override
public Fragment getItem(int position) {
public Fragment createFragment(int position) {
return mFragments[position];
}

@Override
public int getCount() {
public int getItemCount() {
return mFragments.length;
}

@Override
public CharSequence getPageTitle(int position) {
return mFragmentNames[position];
}
};
// Set up the ViewPager with the sections adapter.
binding.container.setAdapter(mPagerAdapter);
binding.tabs.setupWithViewPager(binding.container);
String[] mFragmentNames = new String[]{
getString(R.string.heading_recent),
getString(R.string.heading_my_posts),
getString(R.string.heading_my_top_posts)
};
new TabLayoutMediator(binding.tabs, binding.container,
(tab, position) -> tab.setText(mFragmentNames[position])
).attach();
}

@Override
Expand Down
Expand Up @@ -8,8 +8,9 @@ import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentPagerAdapter
import androidx.navigation.fragment.findNavController
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayoutMediator
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import com.google.firebase.quickstart.database.R
Expand All @@ -22,7 +23,7 @@ class MainFragment : Fragment() {
private var _binding: FragmentMainBinding? = null
private val binding get() = _binding!!

private lateinit var pagerAdapter: FragmentPagerAdapter
private lateinit var pagerAdapter: FragmentStateAdapter

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = FragmentMainBinding.inflate(inflater, container, false)
Expand All @@ -34,28 +35,27 @@ class MainFragment : Fragment() {
setHasOptionsMenu(true)

// Create the adapter that will return a fragment for each section
pagerAdapter = object : FragmentPagerAdapter(parentFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
pagerAdapter = object : FragmentStateAdapter(parentFragmentManager, viewLifecycleOwner.lifecycle) {
private val fragments = arrayOf<Fragment>(
RecentPostsFragment(),
MyPostsFragment(),
MyTopPostsFragment())

private val fragmentNames = arrayOf(
getString(R.string.heading_recent),
getString(R.string.heading_my_posts),
getString(R.string.heading_my_top_posts))
override fun createFragment(position: Int) = fragments[position]

override fun getItem(position: Int) = fragments[position]

override fun getCount() = fragments.size

override fun getPageTitle(position: Int) = fragmentNames[position]
override fun getItemCount() = fragments.size
}

// Set up the ViewPager with the sections adapter.
with(binding) {
container.adapter = pagerAdapter
tabs.setupWithViewPager(container)
TabLayoutMediator(tabs, container) { tab, position ->
tab.text = when(position) {
0 -> getString(R.string.heading_recent)
1 -> getString(R.string.heading_my_posts)
else -> getString(R.string.heading_my_top_posts)
}
}.attach()
}
}

Expand Down
2 changes: 1 addition & 1 deletion database/app/src/main/res/layout/fragment_main.xml
Expand Up @@ -12,7 +12,7 @@
app:layout_constraintTop_toTopOf="parent"
/>

<androidx.viewpager.widget.ViewPager
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="0dp"
Expand Down

0 comments on commit 25505d4

Please sign in to comment.