Fragment碎片的创建和动态更新
Fragment,在平板应用中较为参见,把视图分为两个甚至多个模块。
一,一个简单的fragment
1.创建两个局部文件,用于等待被调用
(1)left_fragment
(2)right_fragment
2.分别创建两个继承于fragment类的类
(1)leftFragment(加载xml文件)
public class LeftleftFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.left_fragment,container,false);//动态加载xml
return view;
}
}
(2)rightFragment
我是代码(同上);
3.在activity所调用的xml中添加<fragment>控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <fragment
android:id="@+id/left_fragment"
android:name="com.cenzhongman.myapplication.fragment.LeftleftFragment"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"/> <fragment
android:id="@+id/right_fragment"
android:name="com.cenzhongman.myapplication.fragment.RightFragment"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout>
二,动态切换fragment
4.在原基础之上创建AnotherRightFragment(指向要调用的layout)
我是代码(同上,较少重复加载)
5.在MainActivity所调用xml中更改布局方式
用两FrameLayout(强制左上角对齐的布局),来存放fragment,动态更新时候将会更换FrameLayout中的内容,也就是旗下的FrameLayout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <FrameLayout
android:id="@+id/left_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"> <fragment
android:name="com.cenzhongman.myapplication.fragment.LeftleftFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment" />
</FrameLayout> <FrameLayout
android:id="@+id/right_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"> <fragment
android:name="com.cenzhongman.myapplication.fragment.RightFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </FrameLayout>
</LinearLayout>
6.在MainActivity中更换fragment
public void onClick(View v) {
AnotherRightFragment anotherRightFragment = new AnotherRightFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.right_fragment, anotherRightFragment);
transaction.commit();//必须调用commit()方法,否则显示不出来
}
1. 创建待添加的碎片实例。
2. 获取到 FragmentManager,在活动中可以直接调用 getFragmentManager()方法得到。
3. 开启一个事务,通过调用 beginTransaction()方法开启。
4. 向容器内加入碎片,一般使用 replace()方法实现,需要传入容器的 id 和待添加的碎
片实例。
5. 提交事务,调用 commit()方法来完成。
三,把fragment添加到返回栈
transaction.addToBackStack(null);//接收一个名字用于描述返回栈的状态,一般传入null即可
用fragment来做导航
1.在MainActivity的xml留出用于装fragment的容器
2.写好Fragment的xml描述文件
3.写四个Fragment的实现类,继承于Fragment
public class IdeaFragment extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_idea,container,false);
return view;
}
}
4.MainActivity应继承于FragmentActivity,并创建Fragment对象
//定义fragment对象,基于v4包
private Fragment study_fragment;
private Fragment app_fragment;
private Fragment idea_fragment;
private Fragment personal_fragment; //定义fragmentManager对象
FragmentManager mFragmentManager; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mFragmentManager = getSupportFragmentManager();//基于v4包
initView(); }
5.得到FragmentTransaction对象,并根据情况选择添加或者显示fragment
!!!一定要commit()!!!
FragmentTransaction transaction = mFragmentManager.beginTransaction(); idea_Button.setImageResource(R.drawable.idea_blue);
idea_TextView.setTextColor(getResources().getColor(R.color.sky_blue));
if (idea_fragment == null) {
idea_fragment = new IdeaFragment();
transaction.add(R.id.content, idea_fragment);
transaction.commit();
} else {
transaction.show(idea_fragment);
transaction.commit();
}
参考资料:Fragment之底部导航栏的实现
Fragment碎片的创建和动态更新的更多相关文章
- 动态更新Toolbar Menu以及Menu中同时显示文字和图标
动态更新Toolbar Menu以及Menu中同时显示文字和图标 我们经常会有这样的需求,在切换Fragment或者点击某个按钮后动态更新Toolbar上Menu项.但是onCreateOptions ...
- 14 Fragment 碎片总结
Fragment 碎片 一, Fragment是什么? Android 3.0以后出现的 Api11 以上 Activity的组成部分 Fragment(小的Activity) Fragment可以显 ...
- 在Android中实现service动态更新UI界面
之前曾介绍过Android的UI设计与后台线程交互,据Android API的介绍,service一般是在后台运行的,没有界面的.那么如何实现service动态更新UI界面呢?案例:通过service ...
- Android中动态更新ListView(转)
在使用ListView时,会遇到当ListView列表滑动到最底端时,添加新的列表项的问题,本文通过代码演示如何动态的添加新的列表项到ListView中.实现步骤:调用ListView的setOnSc ...
- iOS 利用 Framework 进行动态更新
http://nixwang.com/2015/11/09/ios-dynamic-update/ 前言 目前 iOS 上的动态更新方案主要有以下 4 种: HTML 5 lua(wax)hotpat ...
- highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度
highcharts图表组件入门教程:如何监听柱状图柱子点击事件动态更新当前数据点数值和所对应X轴刻度 作者:highcharts | 时间:2014-6-11 14:07:05 | [小 大] | ...
- AsyncTask用法解析-下载文件动态更新进度条
1. 泛型 AysncTask<Params, Progress, Result> Params:启动任务时传入的参数,通过调用asyncTask.execute(param)方法传入. ...
- 仿百度壁纸客户端(五)——实现搜索动画GestureDetector手势识别,动态更新搜索关键字
仿百度壁纸客户端(五)--实现搜索动画GestureDetector手势识别,动态更新搜索关键字 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Frag ...
- antd Select进阶功能 动态更新、函数防抖
一.动态更新Options Antd Select自带的搜索功能很多时候需要结合后端的接口,输入一个关键字的时候会自动更新选择器的选项. 下面列一些注意点 基础实现 选择器选项必须和每次更新的数据挂钩 ...
随机推荐
- 如何设置让iis服务器支持.apk文件的下载
随着智能手机的普及,越来越多的人使用手机上网,很多网站也应手机上网的需要推出了网站客户端,.apk文件就是安卓(Android)的应用程序后缀名,默认情况下,使用IIS作为Web服务器的无法下载此文件 ...
- ecshop /flow.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 ECSHOP的配送地址页面网页没有验证地区参数的有效性,存在sql注入漏 ...
- Linux Process Management && Process Scheduling Principle
目录 . 引言 . 进程优先级 . 进程的生命周 . 进程表示 . 进程管理相关的系统调用 . 进程调度 . 完全公平调度类 . 实时调度类 . 调度器增强 . 小结 1. 引言 在多处理器系统中,可 ...
- tar.xz文件如何解压
1. tar.xz介绍 XZ压缩最新压缩率之王 xz这个压缩可能很多都很陌生,不过您可知道xz是绝大数linux默认就带的一个压缩工具. 之前xz使用一直很少,所以几乎没有什么提起. 2. 压缩 ta ...
- opencv 简单模糊和高斯模糊 cvSmooth
cv::Mat 是C++版OpenCV的新结构. cvSmooth() 是老版 C API. 没有把C接口与C + + 结合. 建议你们也可以花一些时间看一下介绍. 同样,你如果查看opencv/mo ...
- Java Code Examples for javax.servlet.http.Part
http://www.programcreek.com/java-api-examples/index.php?api=javax.servlet.http.Part The following ar ...
- MongoDB安装部署(一)
前言 MongoDB是一个由C++语言编写的基于分布式文件存储的数据库,是当前NoSQL数据库中比较热门的一种,旨在为Web应用提供可扩展的高性能数据存储解决方案. MongoDB 简介 MongoD ...
- iOS - CAEmitterLayer流星
效果图: 流星: #pragma mark - loading animation - (void)showLoadingAnimation { CGRect mainBounds = [[UIScr ...
- OpenGLES入门笔记三
在入门笔记一中比较详细的介绍了顶点着色器和片面着色器. 在入门笔记二中讲解了简单的创建OpenGL场景流程的实现,但是如果在场景中渲染任何一种几何图形,还是需要入门笔记一中的知识:Vertex Sha ...
- Linux学习之CentOS--CentOS6.下Mysql数据库的安装与配置
跟着配置,顺利配置完成 http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html