当前位置: 首页 > article >正文

android RadioButton + ViewPager+fragment

RadioGroup + viewpage + fragment 组合显示导航栏

1、首先主界面的布局控件就是RadioGroup + viewpage

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.mmsx.MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/main_viewpager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <RadioGroup
        android:id="@+id/rg"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        android:background="#FDFDFD"
        android:gravity="center"
        android:orientation="horizontal">

        <RadioButton

            android:id="@+id/rb_wallet"
            style="@style/main_rb_style"
            android:drawableTop="@drawable/button_style_1" />

        <RadioButton

            android:id="@+id/rb_treasure"
            style="@style/main_rb_style"
            android:drawableTop="@drawable/button_style_2" />

        <RadioButton

            android:id="@+id/rb_home"
            style="@style/main_rb_style"
            android:drawableTop="@drawable/button_style_3" />

        <RadioButton

            android:id="@+id/rb_otc"
            style="@style/main_rb_style"
            android:drawableTop="@drawable/button_style_4" />
        />
    </RadioGroup>
</LinearLayout>

这样式可以统一定义好style样式,直接调用

图标的样式

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/home" android:state_checked="true" />
<item android:drawable="@mipmap/home_1" android:state_checked="false" />
</selector>

2、MainActivity实现

首先写一个fragment适配器

public class MainFragmentPagerAdapter extends FragmentPagerAdapter {
    List<Fragment> mFragmentList;
    public MainFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) {
        super(fm);
        mFragmentList=list;
    }

    @Override
    public Fragment getItem(int i) {
        return mFragmentList.get(i);
    }

    @Override
    public int getCount() {
        return mFragmentList!=null?mFragmentList.size():0;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
//        super.destroyItem(container, position, object);
    }
}
MainActivity代码实现,实现滑动切换,点击导航栏切换。
public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {
    List<Fragment> fragmentList = new ArrayList<>();
    MainFragmentPagerAdapter adapter;
    ViewPager viewPager;
    RadioGroup rg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        initView();
        //绑定RadioButton
        initViewPager();
    }
    private void initView() {
        viewPager = findViewById(R.id.main_viewpager);
        rg = findViewById(R.id.rg);
        rg.setOnCheckedChangeListener(this);
        rg.getChildAt(0).performClick();
    }

    private void initViewPager() {
        //添加碎片
        fragmentList.add(new HomeFragment());
        fragmentList.add(new MessageFragment());
        fragmentList.add(new CustomFragment());
        fragmentList.add(new LoginFragment());

        adapter = new MainFragmentPagerAdapter(getSupportFragmentManager(), fragmentList);
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                switch (i) {
                    case 0:
                        rg.check(R.id.rb_wallet);
                        break;
                    case 1:
                        rg.check(R.id.rb_treasure);
                        break;
                    case 2:
                        rg.check(R.id.rb_home);
                        break;
                    case 3:
                        rg.check(R.id.rb_otc);
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });
    }


    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
        switch (checkedId) {
            case R.id.rb_wallet:
                viewPager.setCurrentItem(0);
                break;
            case R.id.rb_treasure:
                viewPager.setCurrentItem(1);
                break;
            case R.id.rb_home:
                viewPager.setCurrentItem(2);
                break;
            case R.id.rb_otc:
                viewPager.setCurrentItem(3);
                break;

        }
    }
}

创建四个fragment代码这里就不贴了。会有点多。四个fragment还有功能实现。

看一下项目结构图

具体实现的界面如下


http://www.kler.cn/a/443334.html

相关文章:

  • Rust 中调用 Drop 的时机
  • USB 驱动开发 --- Gadget 设备连接 Windows 免驱
  • halcon三维点云数据处理(七)find_shape_model_3d_recompute_score
  • arcgis的合并、相交、融合、裁剪、联合、标识操作的区别和使用
  • Leecode刷题C语言之字符串中最大的3位相同数字
  • 晨辉面试抽签和评分管理系统之一:考生信息管理和编排
  • 【Web】PolarCTF2024秋季个人挑战赛wp
  • KMP算法基础
  • 【Lua热更新】下篇 -- 更新中
  • Webpack常见的Plugin有哪些?
  • Java 初学者的第一个 SpringBoot3.4.0 登录系统
  • 【安当产品应用案例100集】032-重塑企业SaaS平台的PostgreSQL凭据管理体系
  • Running CMake (运行 CMake)
  • C语言学习day24:DLL给程序打上窗口破解补丁
  • 借助腾讯云质检平台的新范式,做工业制造企业质检的“AI慧眼”
  • ofd转pdf ofd转图片 python脚本(非ai生成,实测可转换)
  • arduino继电器与电机水泵的使用
  • IDEA能够从mapper跳转到xml的插件
  • 微信小程序TTS解决方案
  • 告别数据查询瓶颈!PostgreSQL 多表连接与复杂条件解析
  • 大连理工大学经济管理学院冠名讲席教授捐赠与聘任仪式圆满举行,乐凡信息成为“冠名讲席教授项目”首捐企业!
  • simpleperf生成火焰图的步骤
  • Python如何正确解决reCaptcha验证码(9)
  • 揭开 Choerodon UI 拖拽功能的神秘面纱
  • 【容器】k8s学习笔记基础部分(三万字超详细)
  • pset4filter less: helpers.c