Android常用复杂控件使用(四)--Fragment(续)

Android Fragment详解 一、什么是Fragment? Fragment:是Android3.0开始新增的概念,意为碎片。Fragment是依赖于Activity的,不能独立存在的。 二、为什么要有Fragment? Android运行在各种各样的设备中,有小屏幕的手机,还有大屏幕的平板,电视等。同样的界面在手机上显示可能很好看,在大屏幕的平板上就未必了,手机的界面放在平板上可能会有过分被拉长、控件间距过大等情况。针... 阅读详情

上一个单元可能讲解的关于Fragment使用的部分相对来说比较复杂,这次我们看一个简单点的应用,使用按钮控制一个容器内部显示的Fragment。


1. 布局文件

我们的布局文件很简单,MainActivity采用相对布局,上面有个标题TextView,下面有个按钮容器放我们的按钮,中间放我们的Fragment:

<RelativeLayout 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"
    tools:context=".MainActivity" >
<!-- 标题 -->
    <TextView
        android:id="@+id/tv_tips"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/tips" />

    <!-- 按钮容器 -->
    <LinearLayout
        android:id="@+id/ll_buttonContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn_testmain"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            style="?android:attr/buttonBarButtonStyle"
            android:text="@string/btn1" />

        <Button
            android:id="@+id/btn_testlist"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            style="?android:attr/buttonBarButtonStyle"
            android:text="@string/btn2" />
    </LinearLayout>

    <!-- Fragment容器 -->
    <LinearLayout
        android:id="@+id/ll_fragmentContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/ll_buttonContainer"
        android:layout_below="@id/tv_tips"
        android:background="@android:color/darker_gray"
        android:orientation="vertical" >
    </LinearLayout>

</RelativeLayout>

我们的Fragment使用两个,一个我们自己设计布局,另一个我们使用系统的ListFragment,所以我们只要设计自己布局的那个Fragment即可:
<RelativeLayout 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"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/main_fragment" />
    <ImageView
        android:id="@+id/iv_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_title"
        android:contentDescription="@string/app_name"/>

</RelativeLayout>

2. Java代码

我们的Fragment代码只是覆盖onCreateView即可:
public class MyMainFragment extends Fragment {

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// 在这个例子中,因为系统已经把layout插入到container中了,所以值为false,
		// 如果为true会导致在最终的layout中创建多余的ViewGroup
		View v = inflater.inflate(R.layout.fragmentmain, container, false);
		ViewUtils.inject(v);
		return v;
	}
}

Activity代码:
@ContentView(R.layout.activity_main)
public class MainActivity extends FragmentActivity {
	@ViewInject(R.id.ll_fragmentContainer)
	LinearLayout ll_fragmentContainer;
	@ViewInject(R.id.btn_testmain)
	Button btn_test1;
	@ViewInject(R.id.btn_testlist)
	Button btn_test2;
	Fragment fragment = null;

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

		// fragment = addMainFragment();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@OnClick(R.id.btn_testmain)
	public void onBtnTest1Click(View v) {
		Log.d(this.toString(), "Button Test 1 Clicked.");
			Fragment newFragment = new MyMainFragment();
			fragment = changeFragment(ConstValues.TAG_FRAGMENT1, newFragment);
	}

	@OnClick(R.id.btn_testlist)
	public void onBtnTest2Click(View v) {
		Log.d(this.toString(), "Button Test 2 Clicked.");
			Fragment newFragment = new MyListFragment();
			fragment = changeFragment(ConstValues.TAG_FRAGMENT2, newFragment);
	}

	private Fragment addMainFragment() {
		FragmentManager manager = getSupportFragmentManager();
		FragmentTransaction trans = manager.beginTransaction();
		Fragment newFragment = new MyMainFragment();
		trans.add(newFragment, ConstValues.TAG_FRAGMENT1);
		trans.addToBackStack(ConstValues.TAG_FRAGMENT1);
		trans.commit();
		return newFragment;
	}
	
	private Fragment changeFragment(String tag, Fragment newFragment) {
		FragmentManager manager = getSupportFragmentManager();
		FragmentTransaction trans = manager.beginTransaction();
		trans.replace(R.id.ll_fragmentContainer, newFragment, tag);
//		trans.addToBackStack(null);
		trans.commit();
		return newFragment;
	}
}

注意在changeFragment的时候如果事务中添加了addToBackStack,则我们按返回键的时候会使得Fragment不断从返回栈中弹出。



这样看起来我们的程序结构就简单多了,对于理解Fragment也就更容易了。





使用Fragment 使用FragmentFragment的介绍Fragment的生命周期创建Fragment在Activity中添加Fragment实例——川菜菜谱 Fragment的介绍 Fragment(碎片)是一种嵌入在Activity中的UI片段,它可以用来描述Activity中的一部分布局。如果Activity界面布局中的控件比较多比较复杂,那么Activity管理起来就比较麻烦,我们可以使用Fragment把屏幕划分成几个片段,进行模块化的管理,从而使程序更加合理和充分地利用的空间。 Fragment的生命周期 A 阅读详情

相关推荐

安卓高级控件(下拉框、列表类视图、翻页类视图、碎片Fragment)

介绍安卓下拉框、列表类视图、翻页类视图、碎片Fragment的日常用法

weixin_42369301的博客 2895

火爆新东西,仿QQ版本的ResideMenuItem框架(最新QQ版本的)

package com.special.ResideMenuDemo; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransa

baijianghai的专栏 1384

Fragment的嵌套使用

Fragment的嵌套在开发中遇到一些比较复杂的UI设计,以及一些需要动态替换的UI模块,这个时候一个Fragment已经很难满足这样的需求。在Fragment中嵌套子Fragment成为了新的解决方法。如何使用Fragment嵌套子Fragment的用法与Avtivity嵌套Fragment类似,但由于两者生命周期的不同,所以仍然有一些不一样的地方。1、在相应的Fragment布局文件中添加Fr...

Update的博客 5572

fragment简单的切换

布局: &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match

lucky6868的博客 288

体验独特的ThumbnailMenu Fragment 控件

本文还有配套的精品资源,点击获取 简介:ThumbnailMenu是一个创新的Android UI组件,它通过提供缩略图样式菜单来改善Fragment切换的用户体验。该控件允许开发者在不同Fragment之间切换时,在界面上显示一个缩略图预览。它通过动态切换、动画效果和自定义配置,提升应用的交互性和视觉吸引力。开发者可以通过集成和配置该控件,实现更加直观和流畅的屏幕切换效果...

weixin_30533301的博客 919

ChangeFragment

androidstudio 切换fragment,实现一个activity中fragment页面的跳转

Fragment的切换

实现Frament的动态切换有两种方式 1.切换的时候x'hi

corerzhang的专栏 526

Android-Fragmentation一个强大用于管理Fragment的Android库

为"单Activity + 多Fragment","多模块Activity 多Fragment"架构而生,简化开发,轻松解决动画、嵌套、事务相关等问题。

Android之底部菜单栏的实现

在我们的项目中,基本上都会用到底部菜单栏,通过点击不同的底部菜单导航到不同的Fragment,布局采用的是RadioButton+Fragment,先看与一下效果(如下图)   因为手机没有录屏,所有不能展示效果,但总算是实现了 代码也很简单,还不到百行,废话少说,上代码和详细的步骤 (1)第一步:UI布局,底层一个Radiogroup和四个RadioButton,中间一个Fragme...

家驹六月天的博客 1万+

Android 12高通thermal-engine调试实战:如何快速开启debug日志并解决CPU降频问题

本文详细介绍了Android 12高通thermal-engine的调试实战,包括如何快速开启debug日志、解读关键日志信息以及解决CPU降频问题。通过优化配置文件和调整温控策略,开发者可以有效提升设备性能,避免因温度管理导致的性能瓶颈。

i3j4k5的博客 307

Eps总结(1)——Eps入门级基本操作:新建工程、加载数据、新建对象、输入输出对象、基本操作

一、新建工程 1、点击工程的“新建” 2、选择比例尺,自定义工程名字,选择保存路径(最好是英文名字与路径) 二、加载本地倾斜影像、点云、超大影像(正射影像): 其中加载点云数据:a.首先需要将las点云转换为pcd格式。b然后才能加载点云。 三、新建点、线、面等对象 1、首先选择好要画的类型: 2、当选择好要画的类型后,不论是点、线、面都使用左侧工具条中的“一条线”进...

liukunrs的博客 4万+

常见问题分析:Fragment在Activity被回收后重叠

简介 现象 我们常在使用fragment时偶现莫名其妙的重叠现象,分明正确的按照顺序调用了add、hide以及show方法 代码 代码相对比较简单,即通过点击button触发fragment的展示与隐藏 class MainActivity : AppCompatActivity(), View.OnClickListener { var homeFragment = HomeFragment() var favoriteFragment = FavoriteFragment()

wangzici的博客 1099

Nornir自动化简单介绍-网络设备信息收集

作为网工,学会通过执行脚本,可以自动化的完成日常一些设备相关配置或信息收集等工作,可以说是事半功倍。 Nornir就是这样一个自动化网络运维工具。按照官网上的说明: Nornir是用python编写的自动化框架,可与python一起使用。Nornir旨在通过提供一个纯Python框架来解决这些问题。 详细参考: Github GitHub - nornir-automation/nornir: Pluggable multi-threaded framework with inventory .

Gun&rose 7806

(四)安卓高级控件的使用

在安卓应用开发中,高级控件提供了更丰富的功能和更复杂的用户界面。本文将介绍一些常用的安卓高级控件,包括它们的属性、用法以及实践示例,帮助你提升应用的用户体验和功能丰富度。:设置控件的宽度和高度。android:id:为控件设置唯一标识符。:设置控件的内边距和外边距。:设置控件的背景颜色或图像。:设置控件的可见性,如visibleinvisiblegone。创建自定义控件:通过继承现有控件或组合多个控件来创建自定义控件。自定义属性:在中定义自定义属性,并在自定义控件中读取这些属性。示例。

小新的博客 728

openEuler 快速入门

openEuler 是一个专注于企业领域的 Linux 发行版,广泛应用于服务器、云计算和边缘计算场景。最初由华为开发,现在由 Open Atom Foundation 进行开发和管理。Open Atom Foundation 是中国第一个开源软件基金会,得到了华为、阿里巴巴、腾讯、百度等知名企业的支持,并且中国信息通信部也是该基金会的一部分。可以将 openEuler 看作是 Red Hat 或 SUSE Linux 的等价物,但它与 SUSE Linux 更为相似。

HuaweiLab_Peach的博客 2055

GXHT40温湿度传感器:I2C通信与CRC校验实战解析

本文详细解析GXHT40温湿度传感器的I2C通信协议与CRC校验机制,涵盖硬件连接、时序控制、数据读取及加热功能应用。通过实战案例分享优化技巧与异常处理,帮助开发者提升嵌入式系统中传感器数据的准确性与可靠性。

rgv234567的博客 242

Android:Fragment详细介绍 & 使用方法解析

FragmentFragment一、什么是Fragment?二、为什么要有Fragment?三、Fragment的特点四、Fragment的生命周期五、将fragment添加到Activity的两种方式参考 Fragment 一、什么是Fragment? Fragment:是Android3.0开始新增的概念,意为碎片。Fragment是依赖于Activity的,不能独立存在的。 Activity界面中的一部分,可理解为模块化的Activity Fragment不能独立存在,必须嵌入到Activity中

JMW1407的博客 3万+

零基础入门simulink建模仿真--基于Simulink的QPSK调制与解调仿真建模示例

QPSK是一种相位调制技术,将两个比特映射到一个符号上,每个符号对应四个可能的相位之一(0°、90°、180°、270°)。通过Simulink,我们可以通过模块化的建模方式实现QPSK的调制和解调过程,并观察信号在信道中的传输效果。通过本指南,我们介绍了如何基于Simulink搭建一个完整的QPSK调制与解调仿真模型,并进行仿真和性能评估。背景介绍:理解QPSK调制与解调的基本原理及其应用。所需工具和环境:列出进行QPSK仿真所需的工具和环境。步骤详解。

amy_mhd的博客 1309

AdapterView类视图控件的使用,Fragment,ViewPager2视图控件的使用

Adapter(适配器)是连接后端数据与前端视图的接口,是数据与视图之间交互的中介。众所周知,Android用户界面采用MVC框架,即model-view-controller,model和view可理解为是数据和视图,而Adapter就属于中间的controller部分。用Adapter作为数据和视图之间交互的中介,就可以将这两部分分开操作:数据改变时,不需要修改视图组件,只需更新Adapter;视图组件改变时,不需要修改数据,只需绑定Adapter即可。:容器控件,整体由一个个子元素item组成,

IH_LZH的博客 2129

小梅哥Xilinx FPGA学习笔记15——基于SPI接口的ADC芯片驱动

ADC(Analog to Digital Conver),通常是指一个将转变为数字信号(二进制表示的离散信号)的转换器。先将输入模拟电压转换成时间或频率,再把中间量转换成数字量双积分型 ADC,先对输入采样电压和基准电压进行两次积分,获得与采样电压平均值成正比的时间间隔,同时用计数器对标准时钟脉冲计数。抗干扰能力强,稳定性好,但转换速度低。①并联比较型 ADC,采用各量级同时并行比较,各位输出码也是同时并行产生,转换速度快。缺点是成本高、功耗大。

m0_51430584的博客 5505

Jenkins自动化部署服务到Kubernetes环境

通过Jenkins实现自动化部署可以大大提高软件交付的效率和质量。本文介绍的部署流程涵盖了从代码编译、Maven依赖管理、Docker镜像构建到Kubernetes部署的完整流程,并提供了通知机制以便及时了解部署状态。特别需要注意的是Maven与私服的配置,这是确保构建过程能够正常访问依赖包的关键。通过Jenkins的凭据管理功能,可以安全地管理私服的认证信息,避免敏感信息泄露。在实际应用中,您可能需要根据具体的项目需求和环境特点调整部署脚本。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 528

android fragment的使用

一.Fragment 是什么 Android Fragment最初是为适应大屏幕只需要更新一部分视图的情况而产生的, Fragment可以当作一个界面的一个组成部分,它小于Activity,一个Activity可以包含多个Fragment,且不同的时刻可以自由地控制一个Activity中呈现出哪些Fragment。就像Linux中进程与线程的关系一样。 这就意味着Fragment可以有自己的生

hzj86911的专栏 740

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android Studio之Fragment界面切换总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 最近需要用安卓开发系统,于是借机学习了下安卓开发,发现安卓开发真乱呀,每个版本都有不同,重要的事项反复修改,还并存,网上的诸多教程,经常混乱着,实在不好用。这几天终于通过反复的测试和得现,感觉基本上掌握了Fragment界面切换的方法,与大家分享一下过程,并记录一下之间的各种坑。 提示:以下是本篇文章正文内容..

1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android四大控件之Fragment的使用

Hi,众猿们,今天和大家讲讲Fragment(碎片)的使用。 先看碎片的定义,碎片是一种可以嵌入到活动中的UI片段,它可以让程序更合理和充分的利用大屏的空间,也就是说,碎片是一种可以兼顾手机和平板设备的技术,碎片的生命周期和活动非常相似,但碎片是要依赖于活动的,因此它又比活动多出了如下几个生命周期的方法(这些方法名什么时候被调用,一看方法名就应该知道了): onAttach():当碎片与活动关联的

任我行吧的博客 5139

android 在fragment中使用listview,android,在fragment中使用listview,不使用listfragment

public class LeftFragment extends Fragment{private ListView listView;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inf...

weixin_33881426的博客 1724

Android常用复杂控件使用(三)--Fragment

Fragment的含义是“碎片”,在Android

「行到水穷处,坐看云起时」 2366
上一篇: Android常用复杂控件使用(三)--Fragment
下一篇: Java开源框架类库介绍(五)--log4j
Soloman
博客等级 码龄25年 171粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值