安卓开发_浅谈Fragment之事务添加Fragment对象

简介: 我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式 看一下布局文件 1 7 8 13 14 View Code 效果图: 一个帧布局动态显示Fragment对象, 1、 1 package com.

我们都知道给一个activity动态添加fragment的时候 有下面几种添加方式

看一下布局文件

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical"
 6     >
 7 
 8     <FrameLayout 
 9         android:layout_width="wrap_content"
10         android:layout_height="100dp"
11         android:id="@+id/show_fragment"
12         ></FrameLayout>
13     
14 </LinearLayout>
View Code

效果图:

一个帧布局动态显示Fragment对象,

1、

 1 package com.xqx_backfragment;
 2 
 3 import android.app.Activity;
 4 import android.app.FragmentManager;
 5 import android.app.FragmentTransaction;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10 
11 public class MainActivity extends Activity {
12     
13     private Button btn_new;
14     private Button btn_back;
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19         btn_new  = (Button) findViewById(R.id.newfragment);
20         btn_back = (Button) findViewById(R.id.backfragment);
21         //新建一个新的fragment
22         btn_new.setOnClickListener(new OnClickListener() {
23             
24             @Override
25             public void onClick(View v) {
26                 // TODO Auto-generated method stub
27                 //创建管理者对象
28                 FragmentManager manager = getFragmentManager();
29                 //创建事务对象
30                 FragmentTransaction action = manager.beginTransaction();            
31                 MyFragment fragment = new MyFragment();
32                 action.add(R.id.show_fragment, fragment);
33                 action.commit();
34                 
35 //                MyFragment fragment = new MyFragment();
36 //                action.add(R.id.show_fragment, fragment);
37 //                action.addToBackStack(null);
38 //                action.commit();
39             }
40         });
41         
42         //返回
43         btn_back.setOnClickListener(new OnClickListener() {
44             
45             @Override
46             public void onClick(View v) {
47                 // TODO Auto-generated method stub
48                 onBackPressed();
49             }
50         });
51     }
52     
53     
54 
55 }
add
1 //创建管理者对象
2                 FragmentManager manager = getFragmentManager();
3                 //创建事务对象
4                 FragmentTransaction action = manager.beginTransaction();            
5                 MyFragment fragment = new MyFragment();
6                 action.add(R.id.show_fragment, fragment);
7                 action.commit();

每次点击新建按钮,都执行上面一段代码,也就是新建一个Fragment对象并加入到事务中,原来的fragment效果被覆盖,只显示最后加入事务的fragment对象,但是此时存在多个fragment对象,之前加入事务的fragment对象都一直存在

点击返回按钮销毁activity 退出activity 

 

 

 

2、

 1 package com.xqx_backfragment;
 2 
 3 import android.app.Activity;
 4 import android.app.FragmentManager;
 5 import android.app.FragmentTransaction;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10 
11 public class MainActivity extends Activity {
12     
13     private Button btn_new;
14     private Button btn_back;
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19         btn_new  = (Button) findViewById(R.id.newfragment);
20         btn_back = (Button) findViewById(R.id.backfragment);
21         //新建一个新的fragment
22         btn_new.setOnClickListener(new OnClickListener() {
23             
24             @Override
25             public void onClick(View v) {
26                 // TODO Auto-generated method stub
27                 //创建管理者对象
28                 FragmentManager manager = getFragmentManager();
29                 //创建事务对象
30                 FragmentTransaction action = manager.beginTransaction();
31             
32                 action.replace(R.id.show_fragment, fragment);
33                 action.commit();
34                 
35             }
36         });
37         
38         //返回
39         btn_back.setOnClickListener(new OnClickListener() {
40             
41             @Override
42             public void onClick(View v) {
43                 // TODO Auto-generated method stub
44                 onBackPressed();
45             }
46         });
47     }
48     
49     
50 
51 }
replace
1 //创建管理者对象
2                 FragmentManager manager = getFragmentManager();
3                 //创建事务对象
4                 FragmentTransaction action = manager.beginTransaction();            
5                 MyFragment fragment = new MyFragment();
6                 action.replace(R.id.show_fragment, fragment);
7                 action.commit();

每次点击新建按钮,都执行上面一段代码,也就是新建一个Fragment对象并加入到事务中,并且替代原来存在的fragment对象,这种情况下R.id.show_fragment视图上始终只有一个fragment对象

点击返回按钮销毁activity 退出activity 

 

3、

 1 package com.xqx_backfragment;
 2 
 3 import android.app.Activity;
 4 import android.app.FragmentManager;
 5 import android.app.FragmentTransaction;
 6 import android.os.Bundle;
 7 import android.view.View;
 8 import android.view.View.OnClickListener;
 9 import android.widget.Button;
10 
11 public class MainActivity extends Activity {
12     
13     private Button btn_new;
14     private Button btn_back;
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19         btn_new  = (Button) findViewById(R.id.newfragment);
20         btn_back = (Button) findViewById(R.id.backfragment);
21         //新建一个新的fragment
22         btn_new.setOnClickListener(new OnClickListener() {
23             
24             @Override
25             public void onClick(View v) {
26                 // TODO Auto-generated method stub
27                 //创建管理者对象
28                 FragmentManager manager = getFragmentManager();
29                 //创建事务对象
30                 FragmentTransaction action = manager.beginTransaction();
31             
32                 MyFragment fragment = new MyFragment();
33                 action.add(R.id.show_fragment, fragment);
34                 action.addToBackStack(null);
35                 action.commit();
36                 
37             }
38         });
39         
40         //返回
41         btn_back.setOnClickListener(new OnClickListener() {
42             
43             @Override
44             public void onClick(View v) {
45                 // TODO Auto-generated method stub
46                 onBackPressed();
47             }
48         });
49     }
50     
51     
52 
53 }
addToBackStack
1 //创建管理者对象
2                 FragmentManager manager = getFragmentManager();
3                 //创建事务对象
4                 FragmentTransaction action = manager.beginTransaction();
5             
6                 MyFragment fragment = new MyFragment();
7                 action.add(R.id.show_fragment, fragment);
8                 action.addToBackStack(null);
9                 action.commit();

每次点击新建按钮,都执行上面一段代码,也就是新建一个Fragment对象并加入到事务中,并将对象加入到回退栈中显示出新的fragment效果图

点击返回按钮显示当前fragment之前的fragment效果图  直到没有fragment对象时activity销毁退出

 

----------------------------------------------------------------------------------------------------------------------------------------

根据需求选择上述三种事务添加fragment对象的方法。

注意:

1、每次添加fragment对象都要将事务提交才有效果(action.commit()) ,下面情况没有事务提交 则fragment对象没有成功加入事务

1 //创建管理者对象
2                 FragmentManager manager = getFragmentManager();
3                 //创建事务对象
4                 FragmentTransaction action = manager.beginTransaction();            
5                 MyFragment fragment = new MyFragment();
6                 action.add(R.id.show_fragment, fragment);

正确写法:

1 //创建管理者对象
2                 FragmentManager manager = getFragmentManager();
3                 //创建事务对象
4                 FragmentTransaction action = manager.beginTransaction();            
5                 MyFragment fragment = new MyFragment();
6                 action.add(R.id.show_fragment, fragment);
7 action.commit();

 

2、每次事务提交之前都要有这个事务对象,下面情况action.commit()之后 不能继续action.commit()

 1 //创建管理者对象
 2                 FragmentManager manager = getFragmentManager();
 3                 //创建事务对象
 4                 FragmentTransaction action = manager.beginTransaction();            
 5                 MyFragment fragment = new MyFragment();
 6                 action.add(R.id.show_fragment, fragment);
 7                 action.commit();
 8                 MyFragment fragment1 = new MyFragment();
 9                 action.add(R.id.show_fragment, fragment1);
10                 action.commit();

正确写法:

 1 //创建管理者对象
 2                 FragmentManager manager = getFragmentManager();
 3                 //创建事务对象
 4                 FragmentTransaction action = manager.beginTransaction();            
 5                 MyFragment fragment = new MyFragment();
 6                 action.add(R.id.show_fragment, fragment);
 7                 action.addToBackStack(null);
 8                 action.commit();
 9                 
10                 action = manager.beginTransaction();            
11                 MyFragment fragment1 = new MyFragment();
12                 action.add(R.id.show_fragment, fragment1);
13                 action.addToBackStack(null);
14                 action.commit();

 

相关文章
|
6月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
990 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
788 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
985 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
7月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
754 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
7月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
223 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
6月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
288 0
|
7月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
808 6
|
9月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
578 11
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
3619 77
|
9月前
|
移动开发 Java 编译器
Kotlin与Jetpack Compose:Android开发生态的演进与架构思考
本文从资深Android工程师视角深入分析Kotlin与Jetpack Compose在Android系统中的技术定位。Kotlin通过空安全、协程等特性解决了Java在移动开发中的痛点,成为Android官方首选语言。Jetpack Compose则引入声明式UI范式,通过重组机制实现高效UI更新。两者结合不仅提升开发效率,更为跨平台战略和现代架构模式提供技术基础,代表了Android开发生态的根本性演进。
364 0

热门文章

最新文章