当前位置:主页 > android教程 > Android Fragment顶部底部导航栏

Android Fragment实现顶部、底部导航栏

发布:2023-03-04 16:30:01 59


给网友们整理相关的编程文章,网友阴悦帆根据主题投稿了本篇教程内容,涉及到Android、Fragment导航栏、Android顶部导航栏、Android底部导航栏、Android Fragment顶部底部导航栏相关内容,已被613网友关注,相关难点技巧可以阅读下方的电子资料。

Android Fragment顶部底部导航栏

前言

无论是顶部还是底部导航栏,都是大多数APP的标配,网络上的相关实现教程也非常之多。最近回忆起以前写的小项目,发现对这块内容有些遗忘,不妨就再整理一遍代码逻辑,记录下来,方便日后查阅(指复制粘贴)。

实现的方式有很多,本文采用以下方式实现:

  • 底部导航栏:Fragment + BottomNavigationView
  • 顶部导航栏:Fragment + ViewPager2 + TabLayout

底部导航栏

<布局文件>




    

    



    
    
    
    

public class MainActivity extends AppCompatActivity {

    private BottomNavigationView mNavigationView;

    private FragmentManager mFragmentManager;

    private Fragment[] fragments;
    private int lastFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mNavigationView = findViewById(R.id.main_navigation_bar);
        initFragment();
        initListener();
    }

    private void initFragment() {
        HomeFragment mHomeFragment = new HomeFragment();
        PlanFragment mPlanFragment = new PlanFragment();
        GameFragment mGameFragment = new GameFragment();
        SettingFragment mSettingFragment = new SettingFragment();
        fragments = new Fragment[]{mHomeFragment, mPlanFragment, mGameFragment, mSettingFragment};
        mFragmentManager = getSupportFragmentManager();
        //默认显示HomeFragment
        mFragmentManager.beginTransaction()
                .replace(R.id.main_page_controller, mHomeFragment)
                .show(mHomeFragment)
                .commit();
    }

    private void initListener() {
        mNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.home:
                        if (lastFragment != 0) {
                            MainActivity.this.switchFragment(lastFragment, 0);
                            lastFragment = 0;
                        }
                        return true;
                    case R.id.plan:
                        if (lastFragment != 1) {
                            MainActivity.this.switchFragment(lastFragment, 1);
                            lastFragment = 1;
                        }
                        return true;
                    case R.id.game:
                        if (lastFragment != 2) {
                            MainActivity.this.switchFragment(lastFragment, 2);
                            lastFragment = 2;
                        }
                        return true;
                    case R.id.setting:
                        if (lastFragment != 3) {
                            MainActivity.this.switchFragment(lastFragment, 3);
                            lastFragment = 3;
                        }
                        return true;
                }
                return false;
            }
        });
    }

    private void switchFragment(int lastFragment, int index) {
        FragmentTransaction transaction = mFragmentManager.beginTransaction();
        transaction.hide(fragments[lastFragment]);
        if (!fragments[index].isAdded()){
            transaction.add(R.id.main_page_controller,fragments[index]);
        }
        transaction.show(fragments[index]).commitAllowingStateLoss();
    }

}

<实现效果>

顶部导航栏

<布局文件>




    

    

public class HomePagerAdapter extends FragmentStateAdapter {

    private List mData = new ArrayList<>();

    public HomePagerAdapter(@NonNull FragmentActivity fragmentActivity, List data) {
        super(fragmentActivity);
        mData = data;
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return HomePageFragment.newInstance(mData.get(position));
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }
}

public class HomeFragment extends Fragment {

    private TabLayout mTabLayout;
    private ViewPager2 mViewPager2;
    private List mData = new ArrayList<>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_home, container, false);
        initData();
        initView(rootView);
        return rootView;
    }

    private void initView(View rootView) {
        mTabLayout = rootView.findViewById(R.id.home_indicator);
        mViewPager2 = rootView.findViewById(R.id.home_pager);
        HomePagerAdapter homePagerAdapter = new HomePagerAdapter(getActivity(), mData);
        mViewPager2.setAdapter(homePagerAdapter);
        new TabLayoutMediator(mTabLayout, mViewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                tab.setText(mData.get(position));
            }
        }).attach();
    }

    private void initData() {
        mData.add("页面1");
        mData.add("页面2");
        mData.add("页面3");
        mData.add("页面4");
        mData.add("页面5");
    }

}

public class HomePageFragment extends Fragment {

    private static final String ARG_PARAM1 = "param1";

    private String mParam1;

    private TextView textView;

    public HomePageFragment() {

    }

    public static HomePageFragment newInstance(String param1) {
        HomePageFragment fragment = new HomePageFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_home_page, container, false);
        textView = rootView.findViewById(R.id.home_page_tv);
        textView.setText(mParam1);
        return rootView;
    }
}

<实现效果>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。


参考资料

相关文章

  • Android开发之ViewPager实现滑动切换页面

    发布:2023-03-10

    这篇文章主要为大家详细介绍了Android开发之ViewPager实现滑动切换页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • Android 动态加载 so实现示例详解

    发布:2023-03-05

    这篇文章主要为大家介绍了Android 动态加载 so实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • Android ASM插桩探索实战详情

    发布:2023-03-04

    这篇文章主要介绍了Android ASM插桩探索实战详情,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的小伙伴可以参考一下


  • Android App实现闪屏页广告图的全屏显示实例

    发布:2023-03-04

    这篇文章主要为大家介绍了Android App实现闪屏页广告图的全屏显示实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • Android Studio调试Gradle插件详情

    发布:2023-03-05

    这篇文章主要介绍了Android Studio调试Gradle插件详情,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的小伙伴可以参考一下


  • Android文件存储SharedPreferences源码解析

    发布:2023-03-02

    SharedPreferences是安卓平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出


  • Android学习笔记之蓝牙功能

    发布:2023-03-12

    这篇文章主要为大家详细介绍了Android学习笔记之蓝牙功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • Android中ShapeableImageView使用实例详解(告别shape、三方库)

    发布:2023-03-04

    之前Google推送了文章,Android Material组件1.2.0里面就有ShapeableImageView,不用像以前再写shape,下面这篇文章主要给大家介绍了关于Android中ShapeableImageView使用的相关资料,需要的朋友可以参考下


网友讨论