如何结合BottomNavigationView和ViewPager? [英] How to combine BottomNavigationView and ViewPager?

查看:91
本文介绍了如何结合BottomNavigationView和ViewPager?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要帮助将ViewPager和BottomNavigationView结合在一起.但是,当我在ViewPager工作时滑动屏幕时,该片段会与另一个片段堆叠在一起.我该如何解决?

I need help to combine ViewPager and BottomNavigationView. But when I swipe the screen as ViewPager works, the fragment become stacked with another fragment. How do I fix this?

堆积的碎片

在刷普通片段之前

这是我的代码:

MainActivity.java

public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {

private BottomNavigationView mBottomNavigation;
private ViewPager viewPager;
private ViewPagerAdapter mViewPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    loadFragment(new HomeFragment());
    mBottomNavigation = findViewById(R.id.buttom_navigation);
    mBottomNavigation.setOnNavigationItemSelectedListener(this);

    viewPager = findViewById(R.id.view_pager);
    mViewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    viewPager.setAdapter(mViewPagerAdapter);
}

private boolean loadFragment(Fragment fragment) {
    if (fragment != null) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.container_frame_layout, fragment);
        ft.commit();
        return true;
    }
    return false;
}

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
    Fragment fragment = null;
    switch (menuItem.getItemId()) {
        case R.id.menu_home:
            fragment = new HomeFragment();
            break;
        case R.id.menu_favorite:
            fragment = new FavoriteFragment();
            break;
        case R.id.menu_account:
            fragment = new AccountFragment();
            break;
    }
    return loadFragment(fragment);
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<FrameLayout
    android:id="@+id/container_frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<androidx.viewpager.widget.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/buttom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:layout_alignParentBottom="true"
    app:itemIconTint="#ffff"
    app:itemTextColor="#ffff"
    app:menu="@menu/item_menu"/>
</RelativeLayout>

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

public ViewPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return new HomeFragment();
        case 1:
            return new FavoriteFragment();
        case 2:
            return new AccountFragment();
    }
    return null;
}

@Override
public int getCount() {
    return 3;
}

提前谢谢!

推荐答案

作为@Chintan先生的回答,我替换了:

As the answer of Mr. @Chintan , I replaced :

return new FooFragment();

viewPager.setCurrentItem(index);

并删除 loadFragment()函数,现在可以正常使用了.非常感谢你!

And remove loadFragment() function, it's perfectly works now. Thank you very much!

这篇关于如何结合BottomNavigationView和ViewPager?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆