一、组件激活
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