Android(安卓)开发入门-使用 Intent 在活动之间穿梭
16lz
2021-01-24
2.3 使用 Intent 在活动之间穿梭
2.3.1 使用显式 Intent
# app/src/main/res/layout/second_layout.xml<?xml version="1.0" encoding="utf-8"?>
# app/src/main/java/com/example/activitytest/SecondActivity.javapublic class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); }}
# app/src/main/AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?> #指定活动标题 #设为主活动 #设为启动器 #注册第二个活动
public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 实例化 Intent,第一个参数为当前上下文,第二个参数为要启动的目标活动 Intent intent = new Intent(FirstActivity.this, SecondActivity.class); // 启动目标活动 startActivity(intent); } }); }
2.3.2 使用隐式 Intent
# 指定当前活动相应的行为是 ACTION_START # 指定当前活动相应的分类是 DEFAULT
public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 实例化 Intent,并设置行为是 ACTION_START,不设置分类则默认分类是 DEFAULT Intent intent = new Intent("com.example.activitytest.ACTION_START"); startActivity(intent); } }); }
增加活动分类:
# 指定当前活动相应的行为是 ACTION_START # 指定当前活动相应的分类是 DEFAULT # 指定当前活动相应的分类是 MY_CATEGORY
public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 实例化 Intent,并设置行为是 ACTION_START Intent intent = new Intent("com.example.activitytest.ACTION_START"); // 为 Intent 设置分类是 MY_CATEGORY intent.addCategory("com.example.activitytest.MY_CATEGORY"); startActivity(intent); } }); }
2.3.3 更多隐式 Intent 的用法
button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 实例化 Intent,并设置行为是 ACTION_VIEW Intent intent = new Intent(Intent.ACTION_VIEW); // 设置 Intent 的 Uri intent.setData(Uri.parse("https://www.baidu.com")); // 启动活动,会打开系统浏览器访问设置的网址 startActivity(intent); }});
<?xml version="1.0" encoding="utf-8"?>
# 指定数据的协议部分是 http
调用系统拨号界面:
button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:10086")); startActivity(intent); }});
2.3.4 向下一个活动传递数据
button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String data = "Hello SecondActivity"; Intent intent = new Intent(FirstActivity.this, SecondActivity.class); // 暂存数据到 Intent 中 intent.putExtra("extra_data", data); startActivity(intent); }});
public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_layout); Intent intent = getIntent(); // 从 Intent 中取出数据 String data = intent.getStringExtra("extra_data"); Log.d("SecondActivity", data); }
2.3.5 返回数据给上一个活动
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.first_layout); Button button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(FirstActivity.this, SecondActivity.class); // 启动活动,并接受活动销毁时返回的数据,第二个参数为请求码,用于判断数据的来源 startActivityForResult(intent, 1); } });}// 下一个活动被销毁时的回调函数@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { // 判断数据来源 switch (requestCode) { case 1: if (resultCode == RESULT_OK) { String returnedData = data.getStringExtra("data_return"); Log.d("FirstActivity", returnedData); } break; default: }}
public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("SecondActivity", "Task id is " + getTaskId()); setContentView(R.layout.second_layout); Button button2 = (Button) findViewById(R.id.button_2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); // 暂存数据到 Intent 中 intent.putExtra("data_return", "Hello FirstActivity"); // 向上一个活动返回数据,第一个参数一般为 RESULT_OK setResult(RESULT_OK, intent); // 销毁当前活动 finish(); } }); } // 绑定按下返回键时的逻辑,与按钮点击的逻辑一致 @Override public void onBackPressed() { Intent intent = new Intent(); intent.putExtra("data_return", "Hello FirstActivity"); setResult(RESULT_OK, intent); finish(); }}
更多相关文章
- Android(安卓)ANR keyDispatchingTimedOut Error while continuo
- Android(安卓)选择文件并加载数据到界面
- Android中实现输入图片地址浏览图片操作
- Android(安卓)的一些提示框
- Android(安卓)day_3 (登录案例 SharedPreferences 的使用)
- Android(安卓)jni 编程(参数的传递,成员,方法的)相互访问
- Android(安卓)保存图片到SQLite
- (Android) ContentProvider 实例
- android 利用pull解析xml数据