Android 活动单元、Intent、Fragment(四)

积一时之跬步 , 臻千里之遥程

千里的路程都是从一步一步开始走的,无边无际的江河都是从一条条小溪汇聚而成的!「凡事不是一蹴而就的」

一分耕耘,一分收获
希望在这里你们能收获到你们想要的。 「共勉」

🍅点击查看Android总结文章总目录

4 程序单元活动Activity

4.1 Activity的生命周期

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(1)onCreate():Activity创建时调用,通常做一些初始化设置

(2)inStart():Activity即将可见时调用

(3)inResume(): Activity获取焦点时调用

(4)onPause(): 当前Activity被其他Activity覆盖或屏幕锁定时调用

(5)onStop(): Activity对用户不可见时调用

(6)onDestroy(): Activity销毁时调用

(7)onRestart():Activity从停止状态到在启动调用时期
在这里插入图片描述
在这里插入图片描述

​ * 如果希望某一个界面一直处于竖屏或者横屏状态,不随手机的晃动而改变,可以在清单文件中通过设置Activity的screenOrientation属性完成。

//竖屏   android:screenOrientation="portrait"
//横屏   android:screenOrientation="landscape"

4.2 Intent与IntentFilter

4.2.1 Intent

在这里插入图片描述

​ Intent被称作为意图,是程序各个组件之间 进行交互的一种重要方式,他不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递,一般用于启动Activity,Service以及发送广播等。有两种实现方式。
在这里插入图片描述

1.显式Intent

​ 显式Intent指直接指定目标组件,里面两个参数,其中第一个参数表示当前Activity,第二个参数表示要跳转的目标Activity,。通常,这些不包括任何其他信息,只是应用程序在用户与应用程序交互时启动其具有的各种内部活动的一种方式。

Intent intent = new Intent(Intent_Demo.this,Intent_Second.class);
startActivity(intent);

2.隐示Intent

​ 没有指定组件;相反,它们必须包含足够的信息供系统确定哪个可用组件最适合该意图运行。里面有三个属性:

action:表示Intent对象要完成的动作

data:表示Intent对象中传递的数据

category:表示为action添加的额外信息

第一步:在程序的清单文件(AndroidManifest.xml)中配置Intent_Third的信息"pdsu.edu.www" 里面内容任意,category 属性里面信息android:name=“android.intent.category.DEFAULT”

<activity android:name=".Intent_Third">
            <intent-filter>
                <action android:name="pdsu.edu.www" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
 </activity>

第二步:

Intent intent2=new Intent();
intent2.setAction("pdsu.edu.www");
startActivity(intent2);

3.下面setClassName也可以实现组件之间的跳转

(1)public Intent setClassName(Context packageContext, String className)

参数:

packageContext:实现此类的应用程序包的上下文

className:将用作次Intent组件的应用程序包内的类的名称

intent1.setClassName(Intent_Demo.this,"com.example.administrator.edittext.Intent_Second");

(2)public Intent setClassName(String packageName, String className)

参数:

packageName:实现所需组件的包的名称

className:将用作次Intent组件的应用程序包内的类的名称

intent1.setClassName("com.example.administrator.edittext","com.example.administrator.edittext.Intent_Second");

4.2.2 IntentFilter

​ 当发送一个隐式Intent后,Android系统会将他与程序中的每一个组件的过滤器进行匹配,匹配属性有action,data,category,需要者三个属性都匹配成功才能唤起相应的组件,在接下来,对三个属性进行介绍:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 在Activity之间的跳转

4.3.1 在Activity之间数据传输

使用Intent传递数据有两种方式,具体如下:

1.使用Intent的putExtra()方法传递数据

​ 由于Activity之间需要传递不同类型的数据,因此Android系统提供了多个重载的putExtra()方法,包含两个参数:参数name表示传递数据名称,参数value表示传递的数据信息
单向数据传递的方式:
1.使用intent对象传递数据
(1)往intent里放数据(key-value):
intent.putExtra(“name”, “zhangsan”);
(2)从intent里取数据:
getIntent();//获取intent对象
intent.getStringExtra(“name”);//获取数据。
在这里插入图片描述

例如:

 Intent intent = new Intent(Intent_Demo.this,Intent_Second.class);
intent.putExtra("studentName","小明");

Intent_Sencond 接收信息:

          Intent intent =getIntent();
        String  name = intent.getStringExtra("studentName");
        Toast.makeText(Intent_Second.this,"获取到的姓名为:"+name,Toast.LENGTH_SHORT).show();
2.使用Bundle类传递数据

​ Bundle类与Map接口比较类似,都是通过键值对的形式来保存数据。
2.使用Bundle传递数据
(1)往Bundle中放数据 : Bundle bundle = new Bundle();
bundle.putString(“test”, “testttttt”);
intent.putExtras(bundle);
(2)获取数据:
intent.getExtras().getString(“test”);

intent.getStringExtra(“test”);
在这里插入图片描述

4.3.2 Activity之间的数据回传

数据回传包括3个方法:

1.startActivityForResult()方法

 Intent intent3=new Intent(Intent_Demo.this,Intent_Third.class);
//第2个参数用于标识请求数据来源
startActivityForResult(intent3,1);

2.setResult()方法

第一个参数表示返回码,用于表示返回的数据来自那个Activity

第二个参数添加返回数据

//通过点击事件进行回传数据
findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent ();
        //放入数据
        intent.putExtra("data","hello");
        // 第一个参数表示返回码,用于表示返回的数据来自那个Activity,第二个参数添加返回数据
        setResult(2,intent);
        finish();
    }
});

​ 值得注意的是,在使用setResult()方法之后,需要调用finish()方法关闭Activity,setResult()方法只负责返回数据,没有跳转的功能。

**3.onActivityResult()**方法

requestCode,resultCode来识别数据的来源

//数据回传
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
       if(requestCode==1&&resultCode==2){
           //获取传递过来的数据
        String result= data.getStringExtra("data");
           Toast.makeText(Intent_Demo.this,result,Toast.LENGTH_SHORT).show();
       }
    }

4.4 Activity的任务栈的启动模式

4.4.1 Android中的任务栈

任务栈:就是用来存放Activity实例的容器

特点:就是先进后出

操作:压栈和出栈

4.4.2 Activity的启动模式

Activity的启动模式有四种:

1.standard模式:

默认启动方式,每启动一个Activity就会在栈顶创建一个新的实例

android:launchMode="standard"

在这里插入图片描述

2.singleTop模式:

模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶直接复用,否则创建新的实例

3.singTask模式:

模式下每次启动该Activity是,系统会首先检查栈中是否存在当前Activity实例,如果存在则直接使用,并把当前Activity之上的所有实例全部出栈

4.singleInstance模式:

模式会启动一个新的任务栈来管理Activity实例,无论从那个任务栈中启动该Activity,该实例在整个系统中只有一个

4.5 使用Fragment

4.5.1 Fragment简介

Fragment(碎片)是一种 可以嵌入在Activity中的UI片段,他可以用来描述Activity中的一部分布局

4.5.2 Fragment生命周期

在这里插入图片描述
在这里插入图片描述

onAttach():Fragment和Activity建立关联的时候调用的

onCreateView():Fragment 创建视图(加载布局)时调用

onActivityCreated():Fragment相关联的Activity已经创建时调用

onDestriyView() :Fragment关联的视图被移除时调用

onDetach() :解除关联的时候调用的

4.5.3 创建Fragment

在这里插入图片描述

4.5.4 在Activity中添加Fragment

在这里插入图片描述
在这里插入图片描述

private FragmentTransaction beginTran;
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建Fragment实例对象(ContentFragment,MenuFragment是两个创建的类)
        ContentFragment contentFragment = new ContentFragment();
        MenuFragment menuFragment = new MenuFragment();
        //开启事务
        beginTran = getFragmentManager().beginTransaction();
        //获取事务添加Fragment
        beginTran.replace(R.id.foodcontent,contentFragment);
        beginTran.replace(R.id.menu,menuFragment);
        beginTran.commit();//提交事务
    }

后续笔记会持续更新,希望大家给个一键三连!!!!!
点击前往Android开发总目录
在这里插入图片描述

  • 30
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 43
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mylife0506

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值