第五课:多活动的工作机制(基于AndroidStudio3.2)

一、组件激活
Android平台在松散耦合方面很有用。 一个应用程序只不过是一个manifest文件和每个组件保存在一起的组件集合,组件通过向其发送消息来激活。 如果你想显示(激活)一个活动,你需要创建一条消息,将其发送到运行时,让运行时为您激活它。您无法直接处理组件。

class FirstActivity extends AppCompatActivity
implements View.OnClickListener {
public void onClick(View v) {
SecondActivity second = new SecondActivity(); // WON'T WORK
}
}
class SecondActivity extends AppCompatActivity {
}

上图中在其它代码平台可能会显示第二个屏幕 ,但是Android平台不会执行。
要激活组件(如活动),我们需要执行以下操作。
1.创建一个Intent对象
2.指定我们想要做什么或甚至如何做
3.将Intent对象发送并激活组件

  • Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互。Intent这个英语单词的本意是“目的、意向、意图”。
  • Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。
    在这里插入图片描述
    如果Activity1需要和Activity2进行联系,二者不需要直接联系,而是通过Intent作为桥梁。通俗来讲,Intnet类似于中介、媒婆的角色。
  • Launching another Activity using an explicit intent
  • Passing data from one activity to another
  • Returning data from a second activity to the main activity
  • Life cycle methods of activities
  • A little bit of Fragments

二、启动特定活动
Intent intent = new Intent(, );
Context对象只是对要启动的组件状态的引用或者启动意图:这通常是this关键字,或者,如果您正在创建Intent在内部类中,它将是ActivityName.this(其中ActivityName是您的名称活动,例如MainActivity)。
Target是您要启动的Activity的名称; 这通常是写的NameOfActivity.class

创建intent对象后,现在可以使用以下方法启动它命令:
startActivity(intent);

例如,如果我们要从MainActivity.java启动名为SecondActivity的活动,
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);

此时,Android运行时将解析intent ,如果找到的话SecondActivity.class,它将被打开。 MainActivity将失去焦点而不会成为焦点对用户可见,因为SecondActivity将占用整个设备屏幕。 用户如果
(1)用户使用后退按钮,则只能导航回MainActivity,
(2)SecondActivity终止,
(3)返回按钮在调用的SecondActivity中编码MainActivity使用另一个Intent对象。

三、演示
1、创建一个新项目
在这里插入图片描述
一直默认。

2、从activity_main中删除生成的textView并放置一个按钮视图。 我们将使用按钮启动第二个活动,我们将其称为子活动。
工程建立后,出现updating indices 一直闪烁
在这里插入图片描述
解决方法:

  • Menu-File-Invalidate Cache/Restart
  • 弹出dialog选择Invalidate and Restart如图
    在这里插入图片描述
  • studio会重启,然后就ok了
    在这里插入图片描述

运行
在这里插入图片描述

3、创建另一个活动组件

  • 选择“app” ,右键选择New ➤ Activity ➤Empty Activity. 也可以选择主菜单File ➤ Activity ➤ Empty Activity
  • name:SecondActivity
  • layout : activity_second
    在这里插入图片描述
    注意:应用程序中的所有活动组件都必须在AndroidManifest中注册文件。 使用“活动”向导的一个优点是它还会自动更新AndroidManifestfile,从而为新创建的Activity添加声明。 你可以查看AndroidManifest.xml at app / manifests / AndroidManifest.xml。

4、给主窗口“启动子活动”按钮增加动作
在设计模式下打开主布局文件(activity_main),选择按钮,然后设置它
“onClick”属性为值“launchSecondActivity”(您可以对该属性执行此操作)
在这里插入图片描述

请记住:Activity组件有两个部分,布局文件(xml)和程序文件(Java)。 现在我们有两个活动组件,我们总共有四个文件可供使用:
在这里插入图片描述
如果您希望在activity_main上由用户生成的事件发生任何操作,则表示您应该在MainActivity.java中编码。 同样,如果事件是从activity_second触发的那样的话代码进入SecondActivity.java。

  • 在MainActivity.java中实现launchSecondActivity方法
package com.example.administrator.firstintent;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button objButton = (Button) findViewById(R.id.button2);
    }

    public void launchSecondActivity(View v) {
        Intent i = new Intent(this, SecondActivity.class);
        startActivity(i);
    }
}

5、实现第二个活动

  • activity_second.xml中增加按钮“关闭”,布局如上面。
    在这里插入图片描述

  • 在SecondActivity.java中增加相应代码

package com.example.administrator.firstintent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;



public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
  

/*
findViewByIdis a locator method; it tries to find the Java object that was created during the
inflation process. If it is found, the address of that object will be stored in the variable named
secondButton
*/
         Button secondButton = (Button) findViewById(R.id.button);
/*
This is just defensive coding; we’re just making sure that secondButtonactually contains the
address of an object, and that it isn’t null or empty
*/
         assert secondButton != null ;

         secondButton.setOnClickListener(new View.OnClickListener() { 
              @Override
              public void onClick(View view) {
/*
This is the important code. When the finishmethod is called against an Activity object, it
effectively destroys the activity and closes it. Destroying the Activity removes it from memory
*/
                  finish(); 
              }
         });

    } 
}

测试运行ok
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值