一般结束Activity: finish()
使用Intent进行数据传递
a. intent携带数据 :intent.putExtra(name, value)
b. 从intent中取数据:intent.getXxExtra(name)
带回调的启动:
a. startActivityForResult(reqCode, intent);
b. 重写onActivityResult(int reqCode, int resultCode, Intent data)
带结果的结束:
setResult(resultCode,intent);
补充:Intent能携带的数据类型?
a. 基本类型及其数组
b. 字符串及其数组
c. 可序列化类型
d. 可打包类型(在Service部分会接触到)
下面:通过一个小例子来深入了解多anctivity的跳转及值传递
第一个activity:
package com.atguigu.l02_activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements OnClickListener {
//视图对象的声明
private EditText et_main_content;
private Button btn_main_start1;
private Button btn_main_start2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//视图对象的初始化
et_main_content = (EditText) findViewById(R.id.et_main_content);
btn_main_start1 = (Button) findViewById(R.id.btn_main_start1);
btn_main_start2 = (Button) findViewById(R.id.btn_main_start2);
//方式二:给两个Button设置点击事件的监听
btn_main_start1.setOnClickListener(this);
btn_main_start2.setOnClickListener(this);
}
@Override
public void onClick(View v) {//v:即为触发此点击事件的对象,即为两个button
//创建一个Intent
Intent intent = new Intent(this, SecondActivity.class);
//获取EditText中的内容
String content = et_main_content.getText().toString();
//携带数据
intent.putExtra("content", content);
if(v == btn_main_start1){
//一般启动
//启动一个新的Activity
startActivity(intent);
}else if(v == btn_main_start2){
//带回调的启动
int requestCode = 1;
//启动一个新的Activity
startActivityForResult(intent, requestCode);
}
}
//当从SecondActivity返回时的回调方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1 && resultCode == RESULT_OK){
String result = data.getStringExtra("result");
et_main_content.setText(result);
}
}
}
SecondActivity:
package com.atguigu.l02_activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends Activity implements OnClickListener {
//视图对象的声明
private EditText et_main_content;
private Button btn_main_start1;
private Button btn_main_start2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//视图对象的初始化
et_main_content = (EditText) findViewById(R.id.et_main_content);
btn_main_start1 = (Button) findViewById(R.id.btn_main_start1);
btn_main_start2 = (Button) findViewById(R.id.btn_main_start2);
//方式二:给两个Button设置点击事件的监听
btn_main_start1.setOnClickListener(this);
btn_main_start2.setOnClickListener(this);
}
@Override
public void onClick(View v) {//v:即为触发此点击事件的对象,即为两个button
//创建一个Intent
Intent intent = new Intent(this, SecondActivity.class);
//获取EditText中的内容
String content = et_main_content.getText().toString();
//携带数据
intent.putExtra("content", content);
if(v == btn_main_start1){
//一般启动
//启动一个新的Activity
startActivity(intent);
}else if(v == btn_main_start2){
//带回调的启动
int requestCode = 1;
//启动一个新的Activity
startActivityForResult(intent, requestCode);
}
}
//当从SecondActivity返回时的回调方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1 && resultCode == RESULT_OK){
String result = data.getStringExtra("result");
et_main_content.setText(result);
}
}
}
完整源码已上传到我的资源里:~
讲到Activity,又不得不提Intent了~
Intent
1. 定义
Three of the core components of an application activities, services, and broadcast receivers are activated through messages, called intents.The intent itself, an Intent object, is a passive data structure holding an abstract description of an operation to be performed.
组件之间进行交互的信使
2. 结构
componentName、action、extras、data、category、flags
3.分类
显式意图:只能访问本应用中指定的组件
Intent(Context context,Class clazz)
隐式意图:可以跨应用访问其他应用的组件
Intent(String action)
3.作用:
①指明要访问的新的组件
②可以携带数据:
写入:
putExtra(String key,Xxx xxx)
setData(Uri uri)
读取:
Xxx getXxxExtra(String key)
getData();
4.理解:intent类似于web中的httpRequest
IntentFilter
1.定义
To inform the system which implicit intents they can handle, activities, services, and broadcast receivers can have one or more intent filters.
用来与隐式意图匹配的一个匹配规则对象
2.理解
IntentFilter类似于web中的为Servlet配置的uri-patten
注意!!!
Intent:翻译为意图,
是Activity\Service\BroadcastRecevier三者之间进行通信的信使。
不是!四大组件之一