Fragment与Radiogroup联动,经典的主界面布局。使用show和hide的方式实现;
Fragment+RadioGroup经典的主界面布局,方便实用;
1、使用replace方式:
直接上代码,先是布局文件;
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/rl" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="#ffffff"> <RadioGroup android:id="@+id/rg" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" android:orientation="horizontal"> <RadioButton android:id="@+id/rb_home" style="@style/main_tab_button" android:drawableTop="@drawable/rgbtn_home_select" android:text="主页"/> <RadioButton android:id="@+id/rb_shoppingcart" style="@style/main_tab_button" android:drawableTop="@drawable/rgbtn_gouwuche_select" android:text="购物车"/> <RadioButton android:id="@+id/rb_orderfrom" style="@style/main_tab_button" android:drawableTop="@drawable/rgbtn_orderfrom_select" android:text="分类"/> <RadioButton android:id="@+id/rb_my" style="@style/main_tab_button" android:drawableTop="@drawable/rgbtn_my_select" android:text="个人"/> </RadioGroup> <View style="@style/Line_e0e0e0_Horizontal"/> </RelativeLayout> <FrameLayout android:id="@+id/fl" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/rl" ></FrameLayout> </RelativeLayout>
Radiogroup的style:
<style name="main_tab_button"> <item name="android:textSize">12dp</item> <item name="android:textColor">@drawable/rgbtn_select</item> <item name="android:ellipsize">marquee</item> <item name="android:gravity">center</item> <item name="android:paddingBottom">2dp</item> <item name="android:background">#ffffff</item> <item name="android:layout_width">0dp</item> <item name="android:layout_weight">1.0</item> <item name="android:layout_height">wrap_content</item> <item name="android:button">@null</item> <item name="android:singleLine">true</item> <item name="android:drawablePadding">2dp</item> </style>
文字的状态选择器:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="#666666" android:state_checked="false"/> <item android:color="#424242" android:state_checked="true"/> </selector>
图片状态选择器:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/datahui_def" android:state_checked="false"/> <item android:drawable="@drawable/datahui_sel" android:state_checked="true"/> </selector>
好了,核心代码:
public class FragmentReplaceActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(getContentViewResource()); initView(); initData(); initList(); }private RadioGroup rg; private Fragment HomeFm = null,SpcFm = null, OrderFm = null, MyFm = null; private final class RadioGroupOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {@Override public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {/** * 替换fragment */ switch (checkedId) {case R.id.rb_home:getSupportFragmentManager().beginTransaction().replace(R.id.fl, HomeFm).commit(); break; case R.id.rb_shoppingcart:getSupportFragmentManager().beginTransaction().replace(R.id.fl, SpcFm).commit(); break; case R.id.rb_orderfrom:getSupportFragmentManager().beginTransaction().replace(R.id.fl, OrderFm).commit(); break; case R.id.rb_my:getSupportFragmentManager().beginTransaction().replace(R.id.fl, MyFm).commit(); break; }}}public int getContentViewResource() {return R.layout.activity_fragment; }protected void initView() {rg = findViewById(R.id.rg); }protected void initData() {HomeFm = new Fragment1(); SpcFm = new Fragment2(); OrderFm = new Fragment3(); MyFm = new Fragment4(); }protected void initList() {rg.setOnCheckedChangeListener(new RadioGroupOnCheckedChangeListener()); rg.check(R.id.rb_home); } }
这样,一个简单的使用replace点击切换界面就好了;不过这样的方式不太好,每次切换都要走一遍fragment中所有的方法,好来介绍下一种:
2、Add,Show,Hide;隐藏和显示fragment;
public class FragmentShowHideActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(getContentViewResource()); initView(); initData(); initList(); }private FrameLayout fl; private RadioGroup rg; private Fragment HomeFm = null,SpcFm = null, OrderFm = null, MyFm = null; private final class RadioGroupOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {@Override public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {if (HomeFm != null) {getSupportFragmentManager().beginTransaction().hide(HomeFm).commit(); }if (SpcFm != null) {getSupportFragmentManager().beginTransaction().hide(SpcFm).commit(); }if (OrderFm != null) {getSupportFragmentManager().beginTransaction().hide(OrderFm).commit(); }if (MyFm != null) {getSupportFragmentManager().beginTransaction().hide(MyFm).commit(); }switch (checkedId) {case R.id.rb_home:if (HomeFm == null) {HomeFm = new Fragment1(); getSupportFragmentManager().beginTransaction().add(R.id.fl, HomeFm).commit(); } else {getSupportFragmentManager().beginTransaction().show(HomeFm).commit(); }break; case R.id.rb_shoppingcart:if (SpcFm == null) {SpcFm = new Fragment2(); getSupportFragmentManager().beginTransaction().add(R.id.fl, SpcFm).commit(); } else {getSupportFragmentManager().beginTransaction().show(SpcFm).commit(); }break; case R.id.rb_orderfrom:if (OrderFm == null) {OrderFm = new Fragment3(); getSupportFragmentManager().beginTransaction().add(R.id.fl, OrderFm).commit(); } else {getSupportFragmentManager().beginTransaction().show(OrderFm).commit(); }break; case R.id.rb_my:if (MyFm == null) {MyFm = new Fragment4(); getSupportFragmentManager().beginTransaction().add(R.id.fl, MyFm).commit(); } else {getSupportFragmentManager().beginTransaction().show(MyFm).commit(); }break; }}}public int getContentViewResource() {return R.layout.activity_fragment; }protected void initView() {fl = findViewById(R.id.fl); rg = findViewById(R.id.rg); }protected void initData() {}protected void initList() {rg.setOnCheckedChangeListener(new RadioGroupOnCheckedChangeListener()); rg.check(R.id.rb_home); } }
简化一下是这样的:使用isAdded方法判断是否添加过;
public class FragmentShowHide2Activity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(getContentViewResource()); initView(); initData(); initList(); }private RadioGroup rg; private Fragment HomeFm = null,SpcFm = null, OrderFm = null, MyFm = null; private final class RgOnCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {@Override public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {switch (checkedId) {case R.id.rb_home:switchFragment(showFragment,HomeFm); break; case R.id.rb_shoppingcart:switchFragment(showFragment,SpcFm); break; case R.id.rb_orderfrom:switchFragment(showFragment,OrderFm); break; case R.id.rb_my:switchFragment(showFragment,MyFm); break; }}}public int getContentViewResource() {return R.layout.activity_fragment; }protected void initView() {rg = findViewById(R.id.rg); }protected void initData() {HomeFm = new Fragment1(); SpcFm = new Fragment2(); OrderFm = new Fragment3(); MyFm = new Fragment4(); }protected void initList() {rg.setOnCheckedChangeListener(new RgOnCheckedChangeListener()); rg.check(R.id.rb_home); }private Fragment showFragment; //当前显示的fragment private void switchFragment(Fragment hide,Fragment show){FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); if (hide == show)return; if (hide != null){if (!show.isAdded()){ft.hide(hide).add(R.id.fl, show).commit(); }else{ft.hide(hide).show(show).commit(); }}else {if (!show.isAdded()){ft.add(R.id.fl, show).commit(); }else{ft.show(show).commit(); }}showFragment = show; } }
下载Demo:FragmentDemo
github:Github
附:使用show和hide的方式显示Fragment,在Activity回收后重叠的问题;
随意门:https://blog.csdn.net/qq_35605213/article/details/79713871
转载于:https://www.cnblogs.com/cuichen16/p/10786009.html
Fragment与Radiogroup联动,经典的主界面布局。使用show和hide的方式实现;相关推荐
- 基于数据挖掘的旅游推荐APP(二):主界面布局
主界面布局通过Fragment实现,底部类似于Tab选项卡,效果如下: 底部导航栏是借鉴GitHub上的一个项目,不对,其实就是抄的.附上原地址链接,把库引进来直接用就行了.下面上代码: activi ...
- easyui主界面布局easyui-layout用法一例
easyui主界面布局easyui-layout用法一例 例一: <body id="topBody" style="padding: 0px 0px 0px 0p ...
- 在线拍卖系统后台,主界面布局,逻辑
这里写自定义目录标题 主界面布局 菜单栏&逻辑(未设置样式) 主界面布局 布局依旧采用的是大众款,(标题栏+菜单栏+主界面),因没设置资源字典,这里不多说,直接上代码吧 <Window ...
- Android项目:手机安全卫士(3)—— 主界面布局
Android项目:手机安全卫士(3)-- 主界面布局 1 总纲 前面实现了"手机安全卫士"的闪屏界面与版本检测升级问题,接下来的任务就是实现主界面了,这个相对简单,因为没有涉及到 ...
- 【原】WPF 主界面布局中DockPanel的停靠与默认填充
在WPF中,通常的主界面大都是DockPanel 根元素,一次DockPanel .Top主菜单.DockPanel .Top Toolbar.DockPanel .Bottom Statusbar, ...
- Android疯狂猜歌游戏之---------主界面布局
第一小节链接: http://www.imooc.com/wenda/detail/256551
- (仿头条APP项目)2.主界面按钮切换Fragment页面
文章目录 主界面按钮切换Fragment页面 效果展示 框架结构 xml视图 主视图 选择器和style java代码模块 创建4个Fragment 1.绑定按钮选择事件 2.初始化和用HashMap ...
- 新增我的推荐歌单、通过ViewPager2+RadioGroup重构主界面( 简易音乐 六)
新增我的推荐歌单.通过ViewPager2+RadioGroup重构主界面( 简易音乐 六) 关于 效果 添加Api接口 重构主界面 新增推荐歌单功能 新增推荐歌单适配器 关于 在本篇开始之前,我 ...
- Android 11.0 Settings源码分析 - 主界面加载
Android 11.0 Settings源码分析 - 主界面加载 本篇主要记录AndroidR Settings源码主界面加载流程,方便后续工作调试其流程. Settings代码路径: packag ...
- Android学习系列(22)--App主界面比较
本文算是一篇漫谈,谈一谈当前几个流行应用的主界面布局,找个经典的布局我们自己也来实现一个. 不是为了追求到底有多难,而是为了明白我们确实需要这么做. 走个题,android的UI差异化市场依然很大, ...
最新文章
- WCF - 基础介绍
- Quartz1.X中CronTrigger第一次启动的问题
- 与众不同 windows phone (32) - Communication(通信)之任意源组播 ASM(Any Source Multicast)...
- 机器学习笔记:为什么要对数据进行归一化处理?
- JAVASE内测试题
- 高达82 fps的实时文本检测,华科AAAI2020提出可微分二值化模块
- PointNet论文笔记
- 各j2ee web层框架比较(转)
- [面试]synchronized
- 联想小新air13pro重装系统_小新air13pro改win7系统 联想小新air13pro安装win7系统教程...
- 智能家居离线语音识别控制系统设计(SU-03T)
- 【Android】aapt2报错:windows W/ziparchive( 2348): Unable to open ‘badging‘: No such file or directory
- html a5 尺寸,纸型尺寸大小(A1,A2,A3,A4,A5,A6,B1,B2,B3,B4,B5......)
- 五、dynamic类型
- 杭州-SQL杭州国迈软件有限公司笔试题
- Python基础练习题目
- iphone充电图_为什么我的iPhone无法充电?
- CENTOS 7 安装 ORACLE 19C
- H5C3动画实例,通过基于jQuery的fullpage插件完成
- Wi-Fi Mesh协议(1)