android中Fragment+RadioButton实现底部导航栏

底部导航栏在Android应用中非常常见,利用Fragment+RadioButton可以轻松实现这个效果。下面是详细的步骤:

1. 布局文件

首先,在主布局文件中添加FrameLayout来放置Fragment。

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

然后,添加RadioButton作为菜单,放在一个RadioGroup中。

<RadioGroup
    android:id="@+id/menu_rg"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="#fff"
    android:gravity="center">

    <RadioButton
        android:id="@+id/menu_home"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/ic_home"
        android:text="@string/menu_home"/>

    <RadioButton
        android:id="@+id/menu_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/ic_message"
        android:text="@string/menu_message"/>

    <RadioButton
        android:id="@+id/menu_mine"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/ic_mine"
        android:text="@string/menu_mine"/>

</RadioGroup>

2. 创建Fragment

在应用中添加对应的Fragment,如下:

public class HomeFragment extends Fragment {

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

把各个Fragment类中的视图元素放的每个Fragment的对应布局文件中。

3. 实现底部导航栏

在activity中实现底部导航栏,用一个FragmentTransaction来管理,然后使用RadioButton与Fragment来替换FrameLayout中的布局(即添加Fragment到FrameLayout中)。

public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener{

    private RadioGroup mRadioGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mRadioGroup = (RadioGroup) findViewById(R.id.menu_rg);
        mRadioGroup.setOnCheckedChangeListener(this);
        RadioButton radioButton = (RadioButton) mRadioGroup.findViewById(R.id.menu_home);
        radioButton.setChecked(true);

        //设置默认的Fragment
        getSupportFragmentManager().beginTransaction().replace(R.id.container, new HomeFragment()).commit();
    }

    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int i) {
        Fragment fragment = null;
        switch (i) {
            case R.id.menu_home:
                fragment = new HomeFragment();
                break;
            case R.id.menu_message:
                fragment = new MessageFragment();
                break;
            case R.id.menu_mine:
                fragment = new MineFragment();
                break;
        }
        if (fragment != null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment).commit();
        }
    }
}

这样,当用户点击了底部导航按钮,就会切换到对应的Fragment。

注意:RadioButton的选中状态应该在activity的onCreate中设定默认值,避免程序崩溃。同时,根据应用的需求可以自定义RadioButton的样式。

示例1:以GitHub的Android客户端app为例,实现底部导航栏。具体实现效果你可以参考官方项目 https://github.com/github/android 。

示例2:以博客园的Android客户端app为例,实现底部导航栏。具体实现效果你可以参考开源项目 https://github.com/ccj659/Cnblogs-Android 。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android中Fragment+RadioButton实现底部导航栏 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • Java内部类_动力节点Java学院整理

    Java内部类_动力节点Java学院整理 本篇攻略是针对Java的内部类进行详细讲解的,包括概念、特点、分类、语法等内容。 概念 内部类是指在一个类的内部定义的另一个类,它通常与外部类有某种联系。内部类是Java中一种非常重要的语法结构,包含了许多编程细节方便了程序员的编码。 特点 内部类可以直接访问外部类的成员变量和方法,包括私有成员。 外部类不能直接访问…

    Java 2023年5月26日
    00
  • 基于javaweb+jsp实现个人日记管理系统

    让我来详细解析一下“基于javaweb+jsp实现个人日记管理系统”的攻略吧。首先,我们需要了解这个系统的基本要素:JavaWeb以及JSP。 一、JavaWeb JavaWeb是指基于Java语言所开发的Web应用程序,在软件开发工程中,开发人员可以使用JavaWeb技术,实现分布式系统的实现。JavaWeb技术是建立在Java平台之上的,包含许多组件,例…

    Java 2023年5月20日
    00
  • Ajax通过XML异步提交的方法实现从数据库获取省份和城市信息实现二级联动(xml方法)

    创建数据库和数据表 首先,需要先创建一个数据库,可以取名为demo,然后在这个数据库中创建一张名为province的数据表,并插入一些数据。表结构如下: CREATE TABLE IF NOT EXISTS `province` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘省份ID’, `…

    Java 2023年6月15日
    00
  • 在JSP页面内编写java代码方法总结

    在JSP页面内编写Java代码是Web开发中非常常见的一个操作,在这里我会为大家总结一下在JSP页面中编写Java代码的方法与步骤。 步骤一:编写JSP页面 首先,我们需要编写一个JSP页面来对外展示我们所编写的Java代码。在JSP页面中,我们使用<% %>标签来插入Java代码。在<% %>中插入的Java代码会被解析器当作脚本来…

    Java 2023年5月23日
    00
  • Java接口的作用_动力节点Java学院整理

    Java接口的作用_动力节点Java学院整理 一、什么是Java接口 Java接口是抽象类的一种特殊形式,它只包含抽象方法、常量和默认方法。接口中所有的成员都是public访问修饰符(当然也可以省略不写public),即所有的成员方法和数据字段都必须是公开的。 二、Java接口的作用 Java接口作为Java中的一种设计思想,在实际开发中具有如下几个作用: …

    Java 2023年5月30日
    00
  • java读取文件内容,解析Json格式数据方式

    Java 读取文件内容并解析 Json 格式数据的方式可以通过 Gson 这个 Google 提供的开源库来实现。 以下是实现步骤: 步骤1:导入Gson库 在 pom.xml 中添加以下依赖: <dependencies> <dependency> <groupId>com.google.code.gson</gr…

    Java 2023年5月20日
    00
  • 剑指Offer之Java算法习题精讲数组与字符串题

    以下是“剑指Offer之Java算法习题精讲数组与字符串题”的完整攻略。 1. 确定题目类型 在学习算法习题时,首先要确定题目类型,以便可以快速地想出解题思路。本篇攻略的主要题目类型为数组与字符串。在处理数组与字符串问题时,可以考虑使用双指针、哈希表和动态规划等常用的技巧。 2. 学习题目解法思路 在确定了题目类型之后,使用双指针、哈希表和动态规划等技巧,根…

    Java 2023年5月19日
    00
  • MVC默认路由实现分页(PagerExtend.dll下载)

    我来给你讲解一下“MVC默认路由实现分页(PagerExtend.dll下载)”的完整攻略。 简介 在MVC项目中,实现分页功能是非常常见的需求。PagerExtend.dll是一个实现分页的工具库,它可以帮助我们在MVC项目中快速地实现分页功能。 使用步骤 1. 下载PagerExtend.dll 首先,我们需要从官网或者其他可靠来源下载PagerExte…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部