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

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.ViewPagerandroid:id="@+id/main_viewpager"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1" /><RadioGroupandroid: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"><RadioButtonandroid:id="@+id/rb_wallet"style="@style/main_rb_style"android:drawableTop="@drawable/button_style_1" /><RadioButtonandroid:id="@+id/rb_treasure"style="@style/main_rb_style"android:drawableTop="@drawable/button_style_2" /><RadioButtonandroid:id="@+id/rb_home"style="@style/main_rb_style"android:drawableTop="@drawable/button_style_3" /><RadioButtonandroid: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;}@Overridepublic Fragment getItem(int i) {return mFragmentList.get(i);}@Overridepublic int getCount() {return mFragmentList!=null?mFragmentList.size():0;}@Overridepublic 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化控件initView();//绑定RadioButtoninitViewPager();}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() {@Overridepublic void onPageScrolled(int i, float v, int i1) {}@Overridepublic 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;}}@Overridepublic void onPageScrollStateChanged(int i) {}});}@Overridepublic 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.lryc.cn/news/506308.html

相关文章:

  • 给机器装上“脑子”—— 一文带你玩转机器学习
  • 论文笔记:是什么让多模态学习变得困难?
  • ChatGPT Search开放:实时多模态搜索新体验
  • Centos7.9 离线安装docker
  • C语言函数在调用过程中具体是怎么和栈互动的?
  • 【Java中常见的异常及其处理方式】
  • 如何更新项目中的 npm 或 Yarn 依赖包至最新版本
  • SpringBoot3整合FastJSON2如何配置configureMessageConverters
  • 《Vue3实战教程》2:Vue3快速上手
  • ubuntu 24.04.1安装FTP流程
  • 多功能护照阅读器港澳通行证阅读机RS232串口主动输出协议,支持和单片机/Linux对接使用
  • 5个用于构建Web应用程序的Go Web框架
  • Qt中的异步相关类
  • 浅谈仓颉语言的优劣
  • Linux 显示系统活动进程状态命令 ps 详细介绍
  • scala中正则表达式的使用
  • 数据分析和AI丨知识图谱,AI革命中数据集成和模型构建的关键推动者
  • cocos creator制作2dTop-down游戏(虚拟摇杆、地图加载)
  • SQL Server 批量插入数据的方式汇总及优缺点分析
  • linux上抓包RoCEv2
  • 【机器学习与数据挖掘实战】案例04:基于K-Means算法的信用卡高风险客户识别
  • UDP网络编程套接
  • 期权VIX指数构建与择时应用
  • QT笔记- QClipboard剪切板对QByteArray数据的复制与粘贴
  • Python使用PyMySQL操作MySQL完整指南
  • IAR中如何而将定义的数组放在指定的位置
  • 使用skywalking,grafana实现从请求跟踪、 指标收集和日志记录的完整信息记录
  • Ubuntu 20.04 24.04 双网卡 Bond 配置指南
  • 深度学习之目标检测篇——残差网络与FPN结合
  • 2024-2030全球及中国埋线针行业研究及十五五规划分析报告