Android高级编程笔记(七)两个Fragment简单跳转示例

  在前两篇博文中分别介绍了Fragment得基础和Fragment的生命周期,然而说了这么多Fragment到底怎么用呢以及我们为什么要使用Fragment?本篇博文将主要探讨这两个问题,首先说下在APP中有这好好Activity,跳转起来有那么简单,我们为什么还要使用Fragment呢?这是因为Fragment相对Activity而言更加的轻量级,使用起来也更加灵活,在一个程序的内部界面切换,尽可能的用Fragment代替Activity会让我们的APP运行起来更加的流畅,更加的高效,同时也提高了界面的复用性。而却Fragment在适应多尺寸屏幕方面表现也非常优秀。

  首先看一下栗子,非常简单的一个小示例,效果图如下:

    

  体验一下就会发现,两个Fragment跳转起来要比Activity跳转的速度快很多。

  MainActivity.java代码如下:

 1 /**
 2  * MainActivity 主界面
 3  * @author codingblock 2015/09/14
 4  *
 5  */
 6 public class MainActivity extends ActionBarActivity {
 7
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         super.onCreate(savedInstanceState);
11         setContentView(R.layout.activity_main);
12         if (savedInstanceState == null) {
13             getSupportFragmentManager()
14                     .beginTransaction()
15                     .add(R.id.container, new MainFragment())
16                     .commit();
17         }
18     }
19 }

  在MainActivity首先通过getSupportFragmentManager()方法获取FragmentTransaction的对象,然后用add()方法将MainFragment加载进来,其中引用的布局文件activity_main.xml如下:

1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
2     xmlns:tools="http://schemas.android.com/tools"
3     android:id="@+id/container"
4     android:layout_width="match_parent"
5     android:layout_height="match_parent"
6     tools:context="com.codingblock.learnfragment.MainActivity"
7     tools:ignore="MergeRootFrame" />

  下面是MainFragment的代码:

 1 /**
 2  * MainFragment 主Fragment
 3  * @author codingblock 2015/09/14
 4  *
 5  */
 6 public class MainFragment extends Fragment {
 7
 8     public MainFragment() {
 9     }
10
11     @Override
12     public View onCreateView(LayoutInflater inflater, ViewGroup container,
13             Bundle savedInstanceState) {
14         View rootView = inflater.inflate(R.layout.fragment_main, container, false);
15         rootView.findViewById(R.id.btn_show_other).setOnClickListener(new OnClickListener() {
16
17             @Override
18             public void onClick(View arg0) {
19                 getFragmentManager()
20                     .beginTransaction()
21                     .addToBackStack(null)  //将当前fragment加入到返回栈中
22                     .replace(R.id.container, new OtherFragment()).commit();
23             }
24         });
25         return rootView;
26     }
27 }

  在这个Fragment放了一按钮用于跳转到另一个Fragment,然后通过FragmentTransaction对象的replace()方法让OtherFragment把当前Fragment替换掉,在这里需要注意的是,如果想让程序可以通过后退方式显示上一个Fragment的话,需要在替换之前通过addToBackStack()把当前Fragment加入到返回栈中。

  它的布局文件fragment_main.xml代码如下:

 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     tools:context="com.codingblock.learnfragment.MainActivity$PlaceholderFragment" >
 7
 8     <Button
 9         android:id="@+id/btn_show_other"
10         android:layout_width="fill_parent"
11         android:layout_height="wrap_content"
12         android:text="跳转到另一个Fragment" />
13
14 </LinearLayout>

  最后一个OtherFragment代码如下:

 1 /**
 2  * OtherFragment 另一个Fragment
 3  * @author codingblock 2015/09/14
 4  *
 5  */
 6 public class OtherFragment extends Fragment {
 7
 8     @Override
 9     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
10         View rootView = inflater.inflate(R.layout.fragment_other, container, false);
11         rootView.findViewById(R.id.btn_back).setOnClickListener(new OnClickListener() {
12
13             @Override
14             public void onClick(View arg0) {
15                 //从栈中将当前fragment推出
16                 getFragmentManager().popBackStack();
17             }
18         });
19         return rootView;
20     }
21 }

  程序跳转到这个Fragment之后,如果想返回上一个MainFragment我们可以点击后退键,也可以为一个按钮绑定一个单击事件用FragmentTransaction的popBackStack()方法将当前的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     <TextView
 8         android:id="@+id/tv_show"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:text="这是另一个Fragment" />
12
13     <Button
14         android:id="@+id/btn_back"
15         android:layout_width="fill_parent"
16         android:layout_height="wrap_content"
17         android:text="返回" />
18
19 </LinearLayout>

  到此为止,栗子就结束了,虽然很简单,却能很清楚的说明Fragment的用法。

  声明:欢迎转载,转载时请附上本文链接。

  

时间: 2024-12-16 03:24:49

Android高级编程笔记(七)两个Fragment简单跳转示例的相关文章

Android高级编程笔记(五)Fragment简介

Fragment是在Android 3.0 (API level 11)中引入的Activity的子模块.初衷是为了适应大屏幕的平板电脑,我们只需要使用Fragment对UI组件进行分组.模块化管理,就能很方便在运行过程中动态更新Activity的界面.Fragment必须被嵌入Activity中使用个,虽然也拥有自己的生命周期,但其生命周期手它所在的Activity的生命周期的控制.只有当该Activity处于活动状态时,我们才可以通过方法独立的操作Fragment. 一.Fragment的几

Android高级编程笔记(六)Fragment的生命周期

在上一篇博文中对Fragment做了简单的介绍,现在再来探讨一下Fragment的生命周期. 一.Fragment的几种状态: 与Activity类似,Fragment也有一下几种状态: · 活动状态:当前Fragment位于前台,可见,可获得焦点. · 暂停状态:其他Activity位于前台,该Fragment可见,不可获得焦点. · 停止状态:不可见,失去焦点. · 销毁状态:该Fragment被完全删除或被结束. 二.Fragment的回调方法: 在Fragment的生命周期中,有一下方法

Android高级编程笔记(四)深入探讨Activity(转)

在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一般的Activity都占据了整个显示屏,但可以创建成半透明或二者浮动的Activity. 一.创建Activity 通过继承Activity类可以创建一个Activity窗口,基本框架如下: 1 public class MyActivity extends Activity { 2 @Overri

Android高级编程笔记(八)深入分析Service启动、绑定过程

Service是Android中一个重要的组件,它没有用户界面,可以运行在后太做一些耗时操作.Service可以被其他组件启动,甚至当用户切换到其他应用时,它仍然可以在后台保存运行.Service 是Android四大组件中与Activity最相似的组件,都代表可执行的程序,区别在于:Service一直运行在后台,没有界面,一旦Service被启动,即完全具有自己的生命周期. 一.创建一个Service 在创建Service时,步骤与Activity很像: 1.继承Service,创建Servi

Android高级编程笔记(三)Application类简介

每次运行APP时,Application类都保持实例化状态.与Activity不同,配置改变不会导致应用程序重启.通过继承Application类,可以完成一下3项工作: · 对Android运行时广播的应用程序级事件做出相应. · 在应用程序组件之间传递对象. · 管理和维护多个应用程序组件使用的资源. 其中,后两项工作通过使用一个单态类能够更好地完成.Application的实现在本质上是单态的,并应作为单态实现,以便提供对其方法和成员变量的访问. 一.扩展和使用Application类 如

4.28 UNIX环境高级编程 笔记

int dup(int filedes); int dup2(int filedes,int filedes2); 这两个函数都可以实现复制一个现存的文件描述符,但是dup一定返回当前可用最小文件描述符,dup2可以用filedes2参数指定新描述符数值.如果filedes2已经打开,则先将其关闭.如果filedes等于filedes2,则返回filedes2而不关闭. 这些函数返回的新文件描述符与参数参数filesdes共享同一个文件表项. 图3 执行dup之后的内核数据结构 dup2是原子操

&lt;unix高级编程&gt;笔记 chapter1

os严格上是软件,为计算机提供资源和app运行环境. 特称为内核. 内核的接口被成为system call;然后库函数对system call进行了封装;shell是特殊app,为运行其他程序提供了一个接口. shell是个命令行解释器,读取输入,执行命令. unix文件系统是由directory和file组成.目录起点成为root,名字是/. 文件属性指类型\大小\所有者\权限以及修改时间.stat和fstat返回文件属性的结构. 比如下面操作: 2.文件名 只有/和null不能出现在文件名里

如何学习android高级编程

学了android高级编程有前途吗?进入2010年之后,android的应用开发进入了一个爆炸式增长的状态,从去年的不到1万款应用程序增加到现在的9万,而且即将突破10万,这也从开发者这一方面展现了用户不断增多的现象.不过需要注意的是,虽然数值的增长速度很快,开发公司还得做好相关的审查工作,尽快提高 android电子市场整体的应用质量,改善应用的盈利环境. 学了android高级编程有前途吗?随着高配置android手机的上市,全3D手机游戏也将会在更多的手机上运行,而android 2.2版

Android网络编程(七)源码解析OkHttp前篇[请求网络]

相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley用法全解析 Android网络编程(四)从源码解析volley Android网络编程(五)OkHttp2.x用法全解析 Android网络编程(六)OkHttp3用法全解析 前言 学会了OkHttp3的用法后,我们当然有必要来了解下OkHttp3的源码,当然现在网上的文章很多,我仍旧希望我这一系列文章篇是最简洁易懂