Android开发 Activity和Fragment详解_Android

1.Activity的生命周期

1)多个Activity组成Activity栈,当前活动位于栈顶。我们先来看看各种Activity基类的类图:

当Activity类定义出来之后,这个Activity何时被实例化、它所包含的方法何时被调用,这些都不是由开发者所决定的,都应该由Android系统来决定。

下面我们来看一下Activity的生命周期:

2.Activity的用法

1)启动、关闭Activity

// 首先需要创建启动的Activity对应的Intent
Intent intent = new Intent(MainActivity.this, TwoActivity.class);

// 启动Activity
startActivity(Intent intent);
startActivityForResult(Intent intent, int requestCode); // requestCode:请求码
//startActivityForResult方法以指定的请求码启动Activity,并通过重写onActivityResult方法获取返回的结果。

// 关闭Activity
finish();
finishActivity(int requestCode);
// finishActivity方法结束以startActivityForResult方法启动的Activity。

2)启动其他Activity并返回结果

当前Activity重写onActivityResult(int requestCode, int resultCode, Intent intent)
requestCode:请求码(指出该方法是从哪个请求的结果触发的)
resultCode:Activity返回的结果码(指出返回的数据来自于哪个新的Activity)
被启动的Activity需要调用setResult()方法设置处理结果。

实例:

在当前Activity中重写onActivityResult方法

public class MainActivity extends Activity {
  Button bn;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // 获取界面上的组件
    ...
    // 绑定事件监听器
    bn.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this, TwoActivity.class);
        startActivityForResult(intent, 0); // 0是请求码,用于标识该请求
      }
    });
  }
  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    // 处理特定的结果
    if (requestCode == 0 && resultCode == 0) {
      // 取出Intent里的Extras数据
      Bundle data = intent.getExtras();
      // 取出Bundle中的数据
      String result = data.getString("test");
      Toast.makeText(getApplicationContext(), result, 0).show();
    }
  }
}

然后在被启动的TwoActivity中调用setResult()方法设置处理结果

// 获取启动该Activity之前的Activity对应的Intent
Intent intent = getIntent();
intent.putExtra("test", "test");
// 设置该SelectActivity的结果码,并设置结束之后退回的Activity
SelectCityActivity.this.setResult(0, intent);
// 结束TwoActivity
TwoActivity.this.finish();

3.使用Bundle在Activity之间交换数据

Intent提供了多个重载的方法来“携带”额外的数据,如下:

intent.putExtras(Bundle data); // 向Intent放入数据包
intent.putExtras(String name, Xxx value); // 向Intent中按key-value对的形式放入数据
intent.getExtras(); // 取出Intent中携带的数据包
intent.getXxxExtras(String name); //从Intent中按key取出指定类型的数据

上面方法中Bundle就是一个简单的数据携带包,Intent主要通过Bundle对象来携带数据,Bundle包含多个方法来存取数据:

Bundle bundle = new Bundle(); // 首先创建一个Bundle对象
bundle.putXxx(String key, Xxx data); // 向Bundle中放入数据
bundle.putSerializable(String key, Serializable data); // 向Bundle中放入一个可序列化的对象(即实现了java.io.Serializable接口)
bundle.getXxx(String key); // 从Bundle中取出数据
bundle.getSerializable(String key); // 从Bundle中取出一个可序列化的对象

4.Activity的四种加载模式

配置AndroidManifest.xml中Activity时,可指定android:launchMode属性用于配置该Activity的加载模式,该属性支持4个属性值:
standard:标准模式;
singleTop:栈顶单例模式;
singleTask:栈内单例模式(如果目标Activity已经存在、但没有位于栈顶,系统会把位于该Activity上面的所有Activity移出Task栈,从而使目标Activity转入栈顶);
singleInstance:全局单例模式(新创建Activity将放入新栈,一个栈只包含一个Activity,如果目标Activity已经存在,系统会把该Activity所在Task转到前台显示出来)。

5.Fragment的生命周期

Fragment是AndroiD3.0引入的新API,Fragment代表Activity子模块(Activity片段),Fragment必须嵌入到Activity中使用,Fragment的生命周期受它所在Activity的生命周期的控制。

Fragment可调用getActivity()方法获取它所在Activity;
Activity可调用FragmentManager的findFragmentById()或findFragmentByTag()方法获取Fragment;
在Activity运行过程中,可调用FragmentManager的add()、remove()、replace()方法动态的添加、删除和替换Fragment。

1)我们先来看看各种Fragment基类的类图:

2)下面我们来看一下Fragment的生命周期,并和Activity的生命周期做对比:

6.Fragment的用法

1)创建Fragment

创建Fragment通常要实现如下三个方法:
onCreate()、onCreateView()、onPause()

为了控制Fragment显示的组件,通常需要重写onCreateView()方法,该方法返回的View将作为该Fragment显示的View组件。

// 重写该方法,该方法返回的View将作为Fragment显示的组件
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  // 加载/res/layout/目录下的fragment.xml布局文件
  View view = inflater.inflate(R.layout.fragment, container, false);
  TextView name = (TextView)view.findViewById(R.id.name));
  ...
  return view;
}

2)将Fragment添加到Activity

将Fragment添加到Activity有如下两种方式:

第1种:在布局文件中使用<fragment.../>元素添加Fragment,<fragment.../>元素的android:name属性指定Fragment的实现类。

第2种:在Java代码中通过FragmentTransaction对象的add()方法来添加Fragment。
Activity的getFragmentManager()方法可返回FragmentManager,FragmentManager对象的beginTransaction()方法即可开启并返回FragmentTransaction对象。

3)如何在Activity中动态的添加、更新、以及删除Fragment呢?

首先需要在MainActivity布局文件中添加FrameLayout(设置id为fl),然后简单创建一个两个Fragment(MyFragment和TwoFragment)如下:

public class MyFragment extends Fragment  {
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_my, container, false);
  }
}
public class TwoFragment extends Fragment  {
  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_two, container, false);
  }
}

接下来就可以在MainActivity中动态的添加、更新、以及删除Fragment了,MainActivity中调用的方法如下:

// 设置默认的Fragment
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
myFragment = new MyFragment();
transaction.replace(R.id.fl, myFragment);
transaction.commit();

假设点击某按钮更新Fragment,该按钮点击事件如下:

@Override
public void onClick(View v) {
  FragmentManager fm = getFragmentManager();
  // 开启Fragment事务
  FragmentTransaction transaction = fm.beginTransaction();
  twoFragment = new TwoFragment();
  // 使用当前Fragment的布局替代fl的控件
  transaction.replace(R.id.fl, twoFragment);
  // transaction.addToBackStack(); // 将事物添加到back栈,允许用户按BACK按键返回到替换Fragment之前的状态
  // 事务提交
  transaction.commit();
}

以上就是对Android Activity和Fragment 的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, android开发
, fragment
, activity
Activity和Fragment
fragmentactivity详解、android fragment详解、android activity详解、android开发fragment、android开发activity,以便于您获取更多的相关知识。

时间: 2024-11-01 08:38:19

Android开发 Activity和Fragment详解_Android的相关文章

Android开发 Activity和Fragment详解

1.Activity的生命周期 1)多个Activity组成Activity栈,当前活动位于栈顶.我们先来看看各种Activity基类的类图: 当Activity类定义出来之后,这个Activity何时被实例化.它所包含的方法何时被调用,这些都不是由开发者所决定的,都应该由Android系统来决定. 下面我们来看一下Activity的生命周期: 2.Activity的用法 1)启动.关闭Activity // 首先需要创建启动的Activity对应的Intent Intent intent =

Android开发之自定义控件用法详解_Android

本文实例讲述了Android开发之自定义控件用法.分享给大家供大家参考,具体如下: 今天和大家分享下组合控件的使用.很多时候android自定义控件并不能满足需求,如何做呢?很多方法,可以自己绘制一个,可以通过继承基础控件来重写某些环节,当然也可以将控件组合成一个新控件,这也是最方便的一个方法.今天就来介绍下如何使用组合控件,将通过两个实例来介绍. 第一个实现一个带图片和文字的按钮,如图所示: 整个过程可以分四步走.第一步,定义一个layout,实现按钮内部的布局.代码如下: custom_bu

Android开发中LayoutInflater用法详解_Android

本文实例讲述了Android开发中LayoutInflater用法.分享给大家供大家参考,具体如下: 在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化:而findViewById()是找xml布局文件下的具体widget控件(如Button.TextView等). 具体作用: 1.对于一个没有被载入或者想要动态载入的界面,都需要使用Layout

Android开发-之五大布局详解_Android

在html中大家都知道布局是什么意思了,简单来说就是将页面划分模块,比如html中的div.table等.那么Android中也是这样的.Android五大布局让界面更加美化,开发起来也更加方便.当然布局方式不一样应用的地方也不一样,当然了有的布局方式也是可以相互转换和嵌套使用的.它们都各有各的优缺点,具体页面要怎么布局还是得看开发需求,但是用的最多的还是相对布局.线性布局以及相对布局和线性布局的嵌套使用.当然,我说的是安卓,并没有指定是安卓手机,比如平板.智能家居(电视...)很多都是Andr

android开发设计模式之——单例模式详解_Android

单例模式是设计模式中最常见也最简单的一种设计模式,保证了在程序中只有一个实例存在并且能全局的访问到.比如在Android实际APP 开发中用到的 账号信息对象管理, 数据库对象(SQLiteOpenHelper)等都会用到单例模式.下面针对一些例子分析一下我们在开发过程中应用单例模式需要注意的点.  一.作用  单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点 二.适用场景 1. 应用中某个实例对象需要频繁的被访问. 2. 应用中每次启动只会存在一个实例.如账

Android开发之对话框案例详解(五种对话框)

下面通过实例代码给大家分享5种android对话框,具体内容详情如下所示: 1 弹出普通对话框 --- 系统更新 2 自定义对话框-- 用户登录 3 时间选择对话框 -- 时间对话框 4 进度条对话框 -- 信息加载.. 5 popuWindow对话框 1 弹出普通对话框 --- 系统更新 //弹出普通对话框 public void showNormalDialog(View v) { AlertDialog.Builder builder = new Builder(this); //设置Di

Android Activity生命周期详解_Android

Activity 的生命周期. 一.理解Activity Activity是Android程序的4大组件之一. Activity是Android程序的表示层.程序的每一个显示屏幕就是一个Activity. 学过WEB开发的同学,可以把Activity理解成网页中的一个JSP文件:或者你可以把它理解成一个Windows的窗口. 下面看一下Activity类的继承关系:    从这里可以看到Activity是Context类的子类,大家对此先有个印象.  二.理解Activity的生命周期 手机最重

Android开发:程序目录结构详解

  HelloWorld程序的目录结构概述   我们可以在文件夹中看到,HelloWorld程序的目录主要包括:src文件夹.gen文件夹.Android文件夹.assets.res文件夹. AndroidManifest.xml.default.properties.在Eclipse的左侧展开HelloWorld项目,可以看到如下图的目录结构:   开发:程序目录结构详解-">   下面将分节介绍上面的各级目录结构.   1.src文件夹   顾名思义(src, source code)

sweet alert dialog 在android studio应用问题说明详解_Android

看到这个sweet-alert-dialog很亲切,因为前端开发本人用的提示就是这个js插件,java牛人很厉害,直接弄成一个java包插件,Good! 下面记录如何引用到工程,并使用: sweet-alert-dialog插件可以直接到github上下载 地址:https://github.com/pedant/sweet-alert-dialog 或者直接到发布好的页面下载: https://github.com/pedant/sweet-alert-dialog/releases 我下载的