安卓开发_浅谈Fragment之事务添加Fragment对象
我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式
看一下布局文件
<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:orientation="vertical"
> <FrameLayout
android:layout_width="wrap_content"
android:layout_height="100dp"
android:id="@+id/show_fragment"
></FrameLayout> </LinearLayout>
效果图:

一个帧布局动态显示Fragment对象,
1、
package com.xqx_backfragment; import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity { private Button btn_new;
private Button btn_back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_new = (Button) findViewById(R.id.newfragment);
btn_back = (Button) findViewById(R.id.backfragment);
//新建一个新的fragment
btn_new.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();
MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
action.commit(); // MyFragment fragment = new MyFragment();
// action.add(R.id.show_fragment, fragment);
// action.addToBackStack(null);
// action.commit();
}
}); //返回
btn_back.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
onBackPressed();
}
});
} }
add
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();
MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
action.commit();
每次点击新建按钮,都执行上面一段代码,也就是新建一个Fragment对象并加入到事务中,原来的fragment效果被覆盖,只显示最后加入事务的fragment对象,但是此时存在多个fragment对象,之前加入事务的fragment对象都一直存在
点击返回按钮销毁activity 退出activity
2、
package com.xqx_backfragment; import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity { private Button btn_new;
private Button btn_back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_new = (Button) findViewById(R.id.newfragment);
btn_back = (Button) findViewById(R.id.backfragment);
//新建一个新的fragment
btn_new.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction(); action.replace(R.id.show_fragment, fragment);
action.commit(); }
}); //返回
btn_back.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
onBackPressed();
}
});
} }
replace
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();
MyFragment fragment = new MyFragment();
action.replace(R.id.show_fragment, fragment);
action.commit();
每次点击新建按钮,都执行上面一段代码,也就是新建一个Fragment对象并加入到事务中,并且替代原来存在的fragment对象,这种情况下R.id.show_fragment视图上始终只有一个fragment对象
点击返回按钮销毁activity 退出activity
3、
package com.xqx_backfragment; import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity { private Button btn_new;
private Button btn_back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_new = (Button) findViewById(R.id.newfragment);
btn_back = (Button) findViewById(R.id.backfragment);
//新建一个新的fragment
btn_new.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction(); MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
action.addToBackStack(null);
action.commit(); }
}); //返回
btn_back.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
onBackPressed();
}
});
} }
addToBackStack
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction(); MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
action.addToBackStack(null);
action.commit();
每次点击新建按钮,都执行上面一段代码,也就是新建一个Fragment对象并加入到事务中,并将对象加入到回退栈中显示出新的fragment效果图
点击返回按钮显示当前fragment之前的fragment效果图 直到没有fragment对象时activity销毁退出
----------------------------------------------------------------------------------------------------------------------------------------
根据需求选择上述三种事务添加fragment对象的方法。
注意:
1、每次添加fragment对象都要将事务提交才有效果(action.commit()) ,下面情况没有事务提交 则fragment对象没有成功加入事务
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();
MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
正确写法:
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();
MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
7 action.commit();
2、每次事务提交之前都要有这个事务对象,下面情况action.commit()之后 不能继续action.commit()
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();
MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
action.commit();
MyFragment fragment1 = new MyFragment();
action.add(R.id.show_fragment, fragment1);
action.commit();
正确写法:
//创建管理者对象
FragmentManager manager = getFragmentManager();
//创建事务对象
FragmentTransaction action = manager.beginTransaction();
MyFragment fragment = new MyFragment();
action.add(R.id.show_fragment, fragment);
action.addToBackStack(null);
action.commit(); action = manager.beginTransaction();
MyFragment fragment1 = new MyFragment();
action.add(R.id.show_fragment, fragment1);
action.addToBackStack(null);
action.commit();
安卓开发_浅谈Fragment之事务添加Fragment对象的更多相关文章
- 安卓开发_浅谈ListView(SimpleAdapter数组适配器)
安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...
- 安卓开发_浅谈Android动画(四)
Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ...
- 安卓开发_浅谈ListView(自定义适配器)
ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果 有这样一个Demo ...
- 安卓开发_浅谈Fragment之ListFragment
ListFragment,即Fragment的一个子类,当我们用的一个Fragment只需要一个listview视图的时候使用 该类有几个特点: 1.ListFragment 本身具只有一个ListV ...
- 安卓开发_浅谈OptionsMenus(选项菜单)
Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开 ...
- 安卓开发_浅谈Action Bar
一.Action Bar 导航栏.是3.0之后出现的. 所以注意使用的时候清单文件要设置下 android:minSdkVersion="11"(至少11) 但如果使用v4包,则不 ...
- 安卓开发_浅谈Notification(通知栏)
Notification通知栏是显示在手机状态的消息,代表一种全局效果的通知 快速创建一个Notification的步骤简单可以分为以下四步: 第一步:通过getSystemService()方法得到 ...
- 安卓开发_浅谈ListView之分页列表
前言: 在开发的过程中,有时候我们需要从网络解析一些数据,比如最近的一些新闻,我们需要把这些数据用ListView显示出来. 因为是解析一个网络数据源,这样将会一下子将所有的数据解析出来,当数据源数据 ...
- 安卓开发_浅谈AsyncTask
现在就来学习一下AsyncTask. 一.先介绍一下AsyncTask: 在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给 ...
随机推荐
- Android开发工程师文集-1 小时学会Widget小组件开发
前言 大家好,给大家带来Android开发工程师文集-1 小时学会Widget小组件开发的概述,希望你们喜欢 学会用Widget (小组件) Widget小组件很方便,很快捷,可以个性化,自己定制,相 ...
- Android精通教程-第一节Android入门简介
前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...
- Python总纲路线
比较全面的Python学习方案: 一,Python 基础教程 二,Python 高级教程 这是系统写学习资料参考,后面会整理单个的学习应用内容. 廖雪峰Python教程传送门
- Introduction to CELP Coding
Speex is based on CELP, which stands for Code Excited Linear Prediction. This section attempts to in ...
- vue 自学笔记(5) 列表渲染
列表渲染 一:v-for 指令 当我们涉及到列表渲染数据的时候,不可能做一个重复的工作去不停的一个一个的渲染每一项列表.并且列表数据的表现,比如从后端请求过来的数据,不可能是一个一个的单独的 JSON ...
- LeetCode:110_Balanced Binary Tree | 平衡二叉树 | Easy
要求:判断一棵树是否是平衡二叉树 Given a binary tree, determine if it is height-balanced. For . 代码如下: struct TreeNod ...
- Migrate from ASP.NET Core 2.0 to 2.1
http://www.talkingdotnet.com/migrate-existing-aspnet-core-2-application-aspnet-core-2-1/ https://doc ...
- CentOS部署pyspider
0x00 环境 阿里云ECS云服务器 CPU:1核 内存:2G 操作系统:Centos 7.3 x64 地域:华北 2(华北 2 可用区 A) 系统盘:40G 0x01 安装依赖 yum instal ...
- Golang 协程调度
一.线程模型 N:1模型,N个用户空间线程在1个内核空间线程上运行.优势是上下文切换非常快但是无法利用多核系统的优点. 1:1模型,1个内核空间线程运行一个用户空间线程.这种充分利用了多核系统的优势但 ...
- Windows10安装Docker
一.Docker下载安装 一般情况下,我们可以从Docker官网docker下载安装文件,但是官方网站由于众所周知的原因,不是访问慢,就是下载慢.下载docker安装包动不动就要个把小时,真是极大的影 ...