安卓学习:碎片切换

Android中Fragment的使用 目录 一、创建一个Fragment项目 二、在项目中创建一个左碎片布局 三、创建一个类来控制布局 四、创建另一个右碎片布局 五、创建布局对应的类 六、创建第二个右布局 七、创建对应的类 八、更改主布局 九、在主活动中注册功能 Fragmen 主要用于平板电脑或手机横屏 一、创建项目 创建一个新项目项目名为Fragment 二、创建第一个碎片布局 在layout下创建一个布局 右击 layout / New / Layout Resource File 取名为 .. 阅读详情


效果:
在这里插入图片描述
实现:
项目结构图
在这里插入图片描述

1.创建碎片集合类FragmentList
import androidx.fragment.app.Fragment;

import java.util.ArrayList;
import java.util.List;

public class FragmentList {
    public static List<Fragment> fragments = new ArrayList<>();
}
2.分别创建三个碎片FirstFragment、SecondFragment、ThirdFragment

在这里插入图片描述

3.代码
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">
</FrameLayout>
fragment_frist.xml
<?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:background="@drawable/img01"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".FirstFragment">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:text="@string/first_fragment"
        android:textColor="#ff0000"
        android:textSize="25sp" />

    <Button
        android:id="@+id/btnNextFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/next_fragment" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/champion"
        android:onClick="doChampion"/>
</LinearLayout>
FirstFragment.java
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import androidx.fragment.app.Fragment;

public class FirstFragment extends Fragment {

    private Button btnNextFragment;

    public FirstFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // 获取碎片视图
        View view = inflater.inflate(R.layout.fragment_first, container, false);
        // 通过资源标识获得控件实例
        btnNextFragment = view.findViewById(R.id.btnNextFragment);
        // 给按钮注册监听器
        btnNextFragment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getFragmentManager().beginTransaction()
                        .addToBackStack("next")
                        .replace(R.id.container,FragmentList.fragments.get(1))
                        .commit();
            }
        });
        // 返回视图
        return view;
    }
}
fragment_second.xml
<?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:background="@drawable/img02"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".FirstFragment">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:text="@string/second_fragment"
        android:textColor="#00ff00"
        android:textSize="25sp" />

    <Button
        android:id="@+id/btnNextFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/next_fragment" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/runner_up"
        android:onClick="doRunner_up"/>
</LinearLayout>
SecondFragment.java
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import androidx.fragment.app.Fragment;

public class SecondFragment extends Fragment {

    private Button btnNextFragment;

    public SecondFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // 获取碎片视图
        View view = inflater.inflate(R.layout.fragment_second, container, false);
        // 通过资源标识获得控件实例
        btnNextFragment = view.findViewById(R.id.btnNextFragment);
        // 给按钮注册监听器
        btnNextFragment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getFragmentManager().beginTransaction()
                        .addToBackStack("next")
                        .replace(R.id.container, FragmentList.fragments.get(2))
                        .commit();
            }
        });

        // 返回视图
        return view;
    }
}
fragment_third.xml
<?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:background="@drawable/img03"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".FirstFragment">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:text="@string/third_fragment"
        android:textColor="#0000ff"
        android:textSize="25sp" />

    <Button
        android:id="@+id/btnNextFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/next_fragment" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/third_winner"
        android:onClick="doThird_winner"/>
</LinearLayout>
ThirdFragment.java
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import androidx.fragment.app.Fragment;

public class ThirdFragment extends Fragment {

    private Button btnNextFragment;

    public ThirdFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        // 获取碎片视图
        View view = inflater.inflate(R.layout.fragment_third, container, false);
        // 通过资源标识获得控件实例
        btnNextFragment = view.findViewById(R.id.btnNextFragment);
        // 给按钮注册监听器
        btnNextFragment.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getFragmentManager().beginTransaction()
                        .addToBackStack("next")
                        .replace(R.id.container, FragmentList.fragments.get(0))
                        .commit();
            }
        });

        // 返回视图
        return view;
    }
}
字符串资源string.xml
<resources>
    <string name="app_name">碎片切换(碎片数组)</string>
    <string name="first_fragment">第一个碎片</string>
    <string name="second_fragment">第二个碎片</string>
    <string name="third_fragment">第三个碎片</string>
    <string name="next_fragment">下一个碎片</string>
    <string name="champion">冠军</string>
    <string name="runner_up">亚军</string>
    <string name="third_winner">季军</string>
</resources>
MainActivity.java
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;

public class MainActivity extends AppCompatActivity {

    private GestureDetector detector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);

        // 获取碎片管理器
        FragmentManager fm = getSupportFragmentManager();

        // 创建三个碎片,添加到碎片列表
        FragmentList.fragments.add(new FirstFragment());
        FragmentList.fragments.add(new SecondFragment());
        FragmentList.fragments.add(new ThirdFragment());

        // 在主容器里添加第一个碎片
        fm.beginTransaction().add(R.id.container, FragmentList.fragments.get(0)).commit();

        // 实例化手势侦测器
        detector = new GestureDetector(new GestureDetector.OnGestureListener() {
            @Override
            public boolean onDown(MotionEvent motionEvent) {
                return false;
            }

            @Override
            public void onShowPress(MotionEvent motionEvent) {

            }

            @Override
            public boolean onSingleTapUp(MotionEvent motionEvent) {
                return false;
            }

            @Override
            public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
                return false;
            }

            @Override
            public void onLongPress(MotionEvent motionEvent) {

            }

            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float v, float v1) {
                // 手势往左滑动10个像素,切换到下一个碎片
                if (e1.getX() - e2.getX() > 10) {
                    // 获取返回栈条目个数
                    int count = getSupportFragmentManager().getBackStackEntryCount();
                    // 获取碎片索引
                    int index = ++count % 3;
                    // 切换碎片
                    getSupportFragmentManager().beginTransaction()
                            .addToBackStack("" + index)
                            .replace(R.id.container, FragmentList.fragments.get(index))
                            .commit();
                }
                return true;
            }
        });
    }

    /**
     * 将窗口的触摸事件交给收拾侦测器来处理
     *
     * @param event
     * @return
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return detector.onTouchEvent(event);
    }

    public void doChampion(View view) {
        Toast.makeText(MainActivity.this,"冠军",Toast.LENGTH_SHORT).show();
    }
    public void doRunner_up(View view) {
        Toast.makeText(MainActivity.this,"亚军",Toast.LENGTH_SHORT).show();
    }
    public void doThird_winner(View view) {
        Toast.makeText(MainActivity.this,"季军",Toast.LENGTH_SHORT).show();
    }
}
Android学习笔记:碎片(Fragment) 一、概念 (1)Fragment是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间。 (2)一般建议使用support-v4库中的Fragment,因为它可以让碎片在所有Android系统版本中保持功能一致。 (3)通过LayoutInflater的inflate()方法加载fragment布局。 二、动态加载碎片 动态加载碎片的步骤: ①创建待添加的碎片实例; ②获... 阅读详情

相关推荐

2020年安卓学习笔记目录

一、讲课笔记 安卓学习笔记01:安装集成开发环境Android Studio 安卓学习笔记02:测试安卓开发环境 安卓学习笔记03:安卓应用目录结构 安卓学习笔记04:安卓平台架构 安卓学习笔记05:Activity概述 安卓学习笔记06:Activity生命周期与启动模式 安卓学习笔记07:事件处理、窗口跳转与传递数据 安卓学习笔记08:线性布局 安卓学习笔记09:帧式布局 安卓学习笔记10:相对布局 安卓学习笔记11:网格布局 安卓学习笔记12:安卓按键事件 安卓学习笔记13:安卓触摸事件 安卓学习笔

howard2005的专栏 3660

Fragment用法

创建Fragment的java文件和xml文件 import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGrou

fusu2178192的博客 1655

从零到一:STM32G431的DSP库集成与FFT实战避坑指南

本文详细介绍了在STM32G431微控制器上集成CMSIS-DSP库并进行FFT实战开发的完整流程。重点解析了通过CubeMX和Keil环境配置DSP库的关键步骤、编译器宏定义陷阱及解决方案,并提供了FFT算法优化、内存管理及常见问题诊断的实用技巧,帮助开发者高效实现嵌入式信号处理应用。

oauth7security的博客 768

fragment 中import androidx.fragment.app.Fragment 和import android.app.Fragment

如题,导入不同的包有不同的效果,如果导入的包在整个项目中不一致会报错,注意import androidx.fragment.app.Fragment是现在3.0以后的,所以如果有错误发生,记得转换这两个包,以后来填两者的区别。 ...

backer 7083

如何在iPhone上本地运行SmolVLM?5亿参数模型实战指南(附Swift代码)

本文详细介绍了如何在iPhone上本地部署和运行轻量高效的SmolVLM多模态模型。通过实战指南,分享了使用Swift和MLX框架进行环境配置、模型加载、内存优化以及实现实时图像分析与文本生成的完整流程,帮助开发者在移动端高效运行AI视觉语言模型。

echo99的专栏 654

Qt+PCL实战:如何用QVTKOpenGLNativeWidget高效渲染3D点云(附完整代码)

本文深入解析了Qt与PCL结合使用QVTKOpenGLNativeWidget进行高效3D点云渲染的实战技术。通过对比传统QVTKWidget,详细介绍了QVTKOpenGLNativeWidget在渲染效率、内存占用和兼容性方面的显著优势,并提供了完整的代码示例和性能优化策略,助力开发者在工业检测、自动驾驶等领域实现更高效的点云可视化。

keras9composer的博客 687

Android开发4:碎片Fragment的使用

Android开发4:碎片Fragment的使用 文章目录Android开发4:碎片Fragment的使用一、碎片的基本使用二、碎片的生命周期 一、碎片的基本使用 碎片是一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,因而在平板上应用的非常广泛。 知识点: 动态添加碎片 碎片的返回栈 left_fragment.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="ht

qq_43819274的博客 365

从‘包饺子’到‘包络线’:一个生活化比喻讲透长期与短期成本决策

本文通过饺子馆经营的生活化比喻,深入浅出地解析了长期与短期成本决策的核心逻辑。从调整人力(可变成本)到扩建厨房(固定成本),揭示了包络线理论在商业决策中的实际应用,帮助企业主在规模经济与成本控制间找到平衡点。

weixin_32006655的博客 338

Android项目框架综合实例

综合使用ViewPager、Fragment、RecycleView等,实现类似“网易新闻浏览器 ”的项目综合框架,要求实现: 底部导航,分别是“首页”,“视频”,“讲讲”,“我的”;底部导航不要求滑动翻页(使用Framelayout作为容器,但也可以使用Viewpager作为容器,图片可自行准备,也可以用分享的图片素材)。 内导航,在“首页”对应的Fragment中实现若干项组成的顶部导航;内导航要求实现滑动翻页(使用ViewPager作为容器,要求内导航碎片不少于十项)。 加分项:内导航的第一个

欢迎来到我的博客 1455

JS逆向实战:从宿务航空机票搜索到参数签名算法解析

在现代Web应用开发中,前端与后端的数据交互安全是核心技术环节。其原理通常涉及参数签名、令牌验证等机制,用于防止未授权访问和数据篡改。这些技术的核心价值在于保障接口调用的合法性与数据完整性,广泛应用于电商、金融、旅行预订等对数据安全要求较高的场景。以机票搜索为例,网站常通过动态生成的签名参数来验证请求来源。本文以宿务太平洋航空为案例,深入解析其搜索请求中关键参数(如signature)的生成逻辑,并演示如何通过浏览器开发者工具进行断点调试、变量追踪,最终使用Node.js与crypto-js库本地复现完整请

weixin_26642481的博客 752

实验7:机器学习油田产量预测-代码数据-完整代码数据可直接运行-计算机毕设

实验7:机器学习油田产量预测-代码数据-完整代码数据可直接运行-计算机毕设

机器学习深度学习业余选手 479

[Android学习] 3.运用碎片进行设置界面的模块切换

运用动态碎片切换,ListView RecyclerView控件以及wifiManager实现基本的设置页面和无线网络页面,总结加深锻炼。

qq_43542689的博客 1089

《人工智能基础》[工具篇2]:ChatBox怎么使用本地模型和知识库配置教程

通过设置-知识库,添加,填入知识库名称、选用的嵌入模型创建好知识库后,点击添加文件按钮+,可以上传本地文件、拖动文件支持上传PDF、DOCX等格式的文档。系统会自动对文档进行处理。批量上传:一次最多上传 50 个文档,总大小不超过 2GB;格式检测:支持 PDF/DOCX/TXT/Markdown,不支持 EXE/RAR 等二进制文件。‌文档类‌图片类‌代码类‌:Python、Java、JavaScript等编程文件‌其他‌:Markdown(用于导出对话记录) ‌。

专注大数据、云计算、人工智能、机器人领域技术传播 2939

切换碎片

切换碎片 一、知识点 Activity (活动窗口) Fragment(碎片、片段) 碎片化学习(Fragmental Learning) TextView(标签) Button(按钮) GestureDetector(手势侦测器) GestureListener(手势监听器) 二、创建安卓应用 (一)、首先创建一个主应用 (二)、创建第一张碎片 (三)、创建第二张碎片 (四)、创建第三张碎片 三、将三张背景图片拷贝到drawable目录 四、主布局资源文件 (一)、主布局activity_swi

LXL1355771905的博客 363

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android碎片的使用

一、动态添加碎片 1》 新建三个布局 <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_widt...

aiduo3346的博客 172

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

安卓android记单词软件

基于安卓的记单词软件,用户在第一次使用的时候,需要点击注册登录,在登录成功后会有引导页面,引导页面可以简单介绍软件使用,用户可以跳过。引导页面后,会跳转到选择词汇本页面,选择完词汇本后,跳转至设置计划页面,设置完学习计划后,会跳转至首页面,在首页可以查看单词的学习进度等信息,有三个学习单词的按钮,分别是“开始记单词”,“单词回顾”,“单词测试”用于不同的学习功能,可以搭配学习使用。在“我的”里面。具有查看收藏信息,更换单词本、等其他功能。 开发环境: 前端:android studio 后端:jdk1.8

执笔浮云的博客 5660

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

android 首页6个碎片,Android 单帧碎片

Android 单帧碎片单帧碎片:单帧碎片是为小屏幕设备所设计的,如手持设备(移动电话),Android 3.0 以上版本支持。实例该实例解释如何创建自己的碎片。这里我们创建两个碎片,其中一个被使用在设备是横屏的时候,另一个被使用在设备是竖屏的时候。下面让我们按照步骤开始吧。步骤描述1使用 Android Studio IDE 来创建一个 Android 应用程序,命名为 Single Fragm...

weixin_39705018的博客 103

手势切换碎片案件

一、知识点 Activity (活动窗口) Fragment(碎片、片段) 碎片化学习(Fragmental Learning) TextView(标签) Button(按钮) GestureDetector(手势侦测器) GestureListener(手势监听器) 二、创建安卓应用 (一)、首先创建一个主应用 (二)、创建第一张碎片 (三)、创建第二张碎片 (四)、创建第三张碎片 三、将三张背景图片拷贝到drawable目录 四、主布局资源文件 (一)、主布局activity_switch

uoprewqsnh的博客 184

安卓学习 Day15:Fragment

安卓学习第十五天,Fragment入门。

zs18384022951的博客 298

Android Studio学习:Fragment入门

安卓学习:Frament入门

m0_62491877的博客 2679

Android碎片学习(二)——动态添加、返回栈、通信

碎片的真正强大之处在于,可以在程序运行时,动态添加到活动中。 代码继续接上文《Android碎片学习(一)——简单用法》 一、动态添加碎片 1、碎片布局 another_right_fragment.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andr...

干燥的空气,湿润的呼吸 609

Android学习笔记一碎片

Android碎片认识碎片在布局文件中添加碎片动态添加碎片在碎片在模拟返回栈碎片和活动之间进行通信碎片的生命周期动态加载布局的技巧 认识碎片 1.一种可以嵌入在活动当中的UI片段,它能让程序更加合理和充分地利用大屏幕的空间,在平板应用得非常广泛.简单来说就是碎片化的活动.有自己的生命周期,依赖于Activity.(就好比把活动比作水,碎片比作鱼) 2.Fragment 和 Activity 是多对多的关系,一个活动可以有多个碎片,同样一个碎片可以放在多个活动当中. 在布局文件中添加碎片 在layout文件

qq_45667312的博客 264

安卓学习笔记 - Fragment入门 18

Fragment入门

HTML778的博客 204

Android学习笔记(十五)——碎片的生命周期(附源码)

碎片的生命周期 点击下载源码 与活动类似,碎片具有自己的生命周期。理解了碎片的生命周期后,我们可以在碎片被销毁时正确地保存其实例,在碎片被重建时将其还原到前一个状态。 1、使用上一篇的项目Fragments,在Fragment1.java文件中添加如下代码: package net.zenail.Fragments; import android.app.

Zenail的专栏 1993
上一篇: 安卓学习:简易乘法计算
下一篇: 安卓实训:基于SD卡音乐播放器V01日志
doubleview
博客等级 码龄7年 12粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值