版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】怎么在android应用中利用Fragment与RadioButton实现一个底部导航栏
本篇文章为大家展示了怎么在android应用中利用Fragment与RadioButton实现一个底部导航栏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先我们先在activity_mian.xml定义布局,整个布局的外面是线性布局,上面是帧布局切换不同的Fragment,底下是RadioGroup嵌套的是RadioButton。代码如下所示:<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical">
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
<RadioGroup
android:id="@+id/rg_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@drawable/home_bottom_parent_bg"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_home"
android:drawableTop="@drawable/home_button_selector"
android:text="首页"
/>
<RadioButton
android:id="@+id/rb_type"
android:drawableTop="@drawable/type_button_selector"
android:text="分类"
/>
<RadioButton
android:id="@+id/rb_community"
android:drawableTop="@drawable/community_button_selector"
android:paddingTop="10dp"
android:text="发现"
/>
<RadioButton
android:id="@+id/rb_cart"
android:drawableTop="@drawable/cart_button_selector"
android:text="购物车"
/>
<RadioButton
android:id="@+id/rb_user"
android:drawableTop="@drawable/user_button_selector"
android:text="个人中心"
/>
</RadioGroup>
</LinearLayout>注意:上面还有样式和drawable,下面我们一个一个的来完善。首先来看样式,打开【res】—【values】—【styles】,代码如下所示:
<style
name="MainButtonStyle">
<!--
Customize
your
theme
here.
-->
<item
name="android:layout_width">0dp</item>
<item
name="android:layout_height">wrap_content</item>
<item
name="android:layout_weight">1</item>
<item
name="android:button">@null</item>
<!--
<item
name="android:drawablePadding">3dp</item>-->
<item
name="android:textColor">@drawable/bottom_button_text_selector</item>
<item
name="android:textSize">10sp</item>
<item
name="android:gravity">center</item>
</style>里面还有一个<itemname="android:textColor">@drawable/bottom_button_text_selector</item>,这个是设置图片和文字的颜色,在drawable的目录下建bottom_button_text_selector,代码如下所示:<?xml
version="1.0"
encoding="utf-8"?>
<selector
xmlns:android="/apk/res/android">
<item
android:color="#535353"
android:state_checked="false"></item>
<item
android:color="#ff4040"
android:state_checked="true"></item>
</selector>接着我们继续来完善drawable,有【首页】【分类】【发现】【购物车】【个人中心】,写法都是一样的,这里用【首页】来做例子,在drawable目录下建home_button_selector,代码如下所示:<?xml
version="1.0"
encoding="utf-8"?>
<selector
xmlns:android="/apk/res/android">
<item
android:drawable="@drawable/main_home"
android:state_checked="false"></item>
<item
android:drawable="@drawable/main_home_press"
android:state_checked="true"></item>
</selector>接下来看MainActivity中的代码,代码如下:package
com.nyl.shoppingmall.app.activity;
import
android.os.Bundle;
import
android.support.v4.app.Fragment;
import
android.support.v4.app.FragmentActivity;
import
android.support.v4.app.FragmentTransaction;
import
android.widget.FrameLayout;
import
android.widget.RadioGroup;
import
com.nyl.shoppingmall.R;
import
com.nyl.shoppingmall.base.BaseFragment;
import
munity.fragment.CommunityFragment;
import
com.nyl.shoppingmall.home.fragment.HomeFragment;
import
com.nyl.shoppingmall.shoppingcart.fragment.ShoppingCartFragment;
import
com.nyl.shoppingmall.type.fragment.TypeCartFragment;
import
com.nyl.shoppingmall.user.fragment.UserCartFragment;
import
java.util.ArrayList;
import
butterknife.Bind;
import
butterknife.ButterKnife;
public
class
MainActivity
extends
FragmentActivity{
@Bind(R.id.frameLayout)
FrameLayout
frameLayout;
@Bind(R.id.rg_main)
RadioGroup
rgMain;
//装fragment的实例集合
private
ArrayList<BaseFragment>
fragments;
private
int
position
=
0;
//缓存Fragment或上次显示的Fragment
private
Fragment
tempFragment;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//ButterKnife和当前Activity绑定
ButterKnife.bind(this);
//初始化Fragment
initFragment();
//设置RadioGroup的监听
initListener();
}
private
void
initListener()
{
rgMain.check(R.id.rb_home);
rgMain.setOnCheckedChangeListener(new
RadioGroup.OnCheckedChangeListener()
{
@Override
public
void
onCheckedChanged(RadioGroup
radioGroup,
int
i)
{
switch
(i){
case
R.id.rb_home:
//首页
position
=
0;
break;
case
R.id.rb_type:
//分类
position
=
1;
break;
case
R.id.rb_community:
//发现
position
=
2;
break;
case
R.id.rb_cart:
//购物车
position
=
3;
break;
case
R.id.rb_user:
//个人中心
position
=
4;
break;
default:
position
=
0;
break;
}
//根据位置得到相应的Fragment
BaseFragment
baseFragment
=
getFragment(position);
/**
*
第一个参数:
上次显示的Fragment
*
第二个参数:
当前正要显示的Fragment
*/
switchFragment(tempFragment,baseFragment);
}
});
}
/**
*
添加的时候按照顺序
*/
private
void
initFragment(){
fragments
=
new
ArrayList<>();
fragments.add(new
HomeFragment());
fragments.add(new
TypeCartFragment());
fragments.add(new
CommunityFragment());
fragments.add(new
ShoppingCartFragment());
fragments.add(new
UserCartFragment());
}
/**
*
根据位置得到对应的
Fragment
*
@param
position
*
@return
*/
private
BaseFragment
getFragment(int
position){
if(fragments
!=
null
&&
fragments.size()>0){
BaseFragment
baseFragment
=
fragments.get(position);
return
baseFragment;
}
return
null;
}
/**
*
切换Fragment
*
@param
fragment
*
@param
nextFragment
*/
private
void
switchFragment(Fragment
fragment,BaseFragment
nextFragment){
if
(tempFragment
!=
nextFragment){
tempFragment
=
nextFragment;
if
(nextFragment
!=
null){
FragmentTransaction
transaction
=
getSupportFragmentManager().beginTransaction();
//判断nextFragment是否添加成功
if
(!nextFragment.isAdded()){
//隐藏当前的Fragment
if
(fragment
!=
null){
transaction.hide(fragment);
}
//添加Fragment
transaction.add(R.id.frameLayout,nextFragment).commit();
}else
{
//隐藏当前Fragment
if
(fragment
!=
null){
transaction.hide(fragment);
}
transaction.show(nextFragment).commit();
}
}
}
}
}首先使用ButterKnife初始化布局控件,然后在onCreate方法中初始化Fragment和绑定RadioGroup的选中改变事件,为了方便初始化Fragment,写了一个initFragment方法,在方法内部创建HomeFragment,TypeCartFragment,CommunityFragment,ShoppingCartFragment,UserCartFragment四个Fragment实例,然后使用一个fragments集合存储这四个实例。接下来写一个switchFragment方法,用于切换显示指定的Fragmetn,当RadioGroup的选中改变时,首先根据选中的位置获取到对应的Fragment,然后将获取到的Fragment传入到switchFragment方法中进行显示。由于每次RadioGroup的选中改变获取到的Fragment都不一样,从而可以实现根据选中的RadioGroup展示不同的Fragment效果,也就是常见的Tab切换效果。Activity中用到的HomeFragment,TypeCartFragment,CommunityFragment,ShoppingCartFragment,UserCartFragment这四个Fragment的代码比较简单,以HomeFragment为例,代码如下:package
com.nyl.shoppingmall.home.fragment;
import
android.util.Log;
import
android.view.Gravity;
import
android.view.View;
import
android.widget.TextView;
import
com.nyl.shoppingmall.base.BaseFragment;
/**
*
首页Fragment
*/
public
class
HomeFragment
extends
BaseFragment
{
private
final
static
String
TAG
=
HomeFragment.class.getSimpleName();
private
TextView
textView;
@Override
public
View
initView()
{
textView
=
new
TextView(mContext);
textView.setGravity(Gravity.CENTER);
textView.setTextSize(25);
Log.e(TAG,"主页面的Fragment的UI被初始化了");
return
textView;
}
@Override
public
void
initData()
{
super.initData();
textView.setText("首页");
Log.e(TAG,"主页面的Fragment的数据被初始化了");
}
}HomeFragment继承自BaseFragment,然后重写父类的initView方法和initData方法,BaseFragment的代码如下:package
com.nyl.shoppingmall.base;
import
android.content.Context;
import
android.os.Bundle;
import
android.support.annotation.Nullable;
import
android.support.v4.app.Fragment;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
/**
*
基类Fragment
*
首页:HomeFragment
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抹灰、涂料技术交底
- 华北电力大学工程电磁场课件6月10日
- 2024年汽车导航仪项目发展计划
- 氧化还原滴定法
- 天然气灶松手熄火原因的方法
- 2024年生活垃圾焚烧发电项目建议书
- 2024年聚氨酯漆合作协议书
- 2024年网络隔离机(卡)项目合作计划书
- 2024年水稻新品种、新组合合作协议书
- 药品和医疗器械无菌包装全球前13强生产商排名及市场份额
- DB22∕T 162-2017 建筑消防设施检验规程
- DB4201∕T 646-2021 轨道交通工程运营期结构监测技术规程
- 2022年 武汉理工大学自考英语(二)练习题汇总(附答案解析)
- unit3 Cultural Differences
- MSA EXCEL计算表全套模板
- 数学-九宫数独100题(附答案)
- 初中地理2022长春市初中学业水平考试真题含答案
- 红楼梦诗词解读
- “双减”政策下班主任班级管理方法与策略三篇
- 《八只小鹅》课件
- 第五版方剂教材歌诀
评论
0/150
提交评论