Android 活动单元IntentFragment

Posted www?

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 活动单元IntentFragment相关的知识,希望对你有一定的参考价值。

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

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

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

🍅点击查看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表示传递的数据信息

例如:

 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接口比较类似,都是通过键值对的形式来保存数据。

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开发总目录

以上是关于Android 活动单元IntentFragment的主要内容,如果未能解决你的问题,请参考以下文章

Android ImageView 大小在运行时意外更改

每次活动单元格更改行时更新单元格值

单元格处于活动状态时突出显示整行

Robolectric:测试包含来自项目依赖的视图的活动

如何复制相对于我的活动单元格的一系列单元格?

如果前一个单元格具有值 HandsOnTable,如何将单元格更改为非活动状态