04 Activity窗口间的切换及参数的传递
来源:互联网 发布:上帝已死 知乎 编辑:程序博客网 时间:2024/05/29 18:00
在Android系统里,App间的通信和一个App内的Activity间的通信都是由Intent类对象来完成的. Android是一个高度中央集权制管理的系统, 基本上所有的操作都是向系统发出请求,由系统来完成的. 这种向系统的请求操作就是由Intent来实现.
Intent负责描述向系统请求操作的具体行为,涉及的参数及附带的数据等信息, Android系统根据Intent的描述信息作相应的操作。
Intent功能比较复杂, 其中用于Activity启动有两种方式:
1 显式启动的方式,即在创建Intent对象时,指定由当前的对象和要用于创建出对象的类. 然后用startActivity(Intent对象)来启动, 并可以启动前可用Intent的putExtras(..)设置要传递的参数
2 隐式启动的方式。 显式在启动时需要具体指定哪个类对象, 隐式启动只需指定一种系统操作, 至于这操体具体是由哪个类对象完成,这个不是由程序指定而是由系统及用户决定.
如实现需要打开www.baidu.com的页面, 至于使用哪个浏览器由系统决定:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com")); startActivity(intent);
用显式启动的方式实现两个Activity窗口跳转,并传递参数:
1 MyActivity窗口作主窗口,窗口只有一个按钮”START OTHERACTIVITY”, 点击按钮后出现另一个窗口OtherActivity窗口。 在OtherActivity窗口上只有一个TextView,显示”this is other activity”及显示从主窗口接收到的参数
2 主窗口创建Intent对象,并在创建时指定使用当前窗口对象创建出OtherActivity窗口, 并在启动窗口前设置传送字符串参数。
Intent intent = new Intent(MyActivity.this, OtherActivity.class); intent.putExtra("what", "hello others"); //"what"是用于区分参数内容的关键字,接收时使用此关键接收相应的参数值 startActivity(intent); //根据Intent描述信息启动窗口
3 在OtherActivity窗口里获取参数值:
String str = this.getIntent().getStringExtra("what");
完整代码:
/* MyActivity.java */package com.example.jk.a01hello;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;public class MyActivity extends Activity { private Button btn; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //调用父类的功能 LinearLayout hlayout; hlayout = new LinearLayout(this); hlayout.setOrientation(LinearLayout.HORIZONTAL); btn = new Button(this); btn.setText("start OtherActivity"); hlayout.addView(btn); setContentView(hlayout); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MyActivity.this, OtherActivity.class); intent.putExtra("what", "hello others"); //"what"是用于区分参数内容的关键字,接收时使用此关键接收相应的参数值 startActivity(intent); } }); }}
/* OtherActivity.java */package com.example.jk.a01hello;import android.app.Activity;import android.os.Bundle;import android.widget.LinearLayout;import android.widget.TextView;public class OtherActivity extends Activity { private TextView label; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String str = this.getIntent().getStringExtra("what"); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); label = new TextView(this); label.setText("this is other activity : " + str); layout.addView(label); setContentView(layout); }}
同时需要修改AndroidManifest.xml文件,声明两个Activity:
<activity android:name=".MyActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".OtherActivity"> </activity>
如需实现主窗口接收OtherActivity窗口的返回结果时,基于上面例子的更改:
MyActivity:
1 用startActivityForResult(intent, int requestCode)来启动Intent, requestCode用于区分接收多个启动窗口的返回结果
2 实现抽像函数void onActivityResult(int requestCode, int resultCode, Intent data)
, 当有启动窗口的返回结果时会自动触发此函数, 通过参数就可以得到具体的返回值
OtherActivity:
只要在窗口关闭前用setResult设置返回值即可
基于上面的例子修改,OtherActivity增加一个按钮, 点击按钮时设置返回结果,并关闭窗口.
/* MyActivity.java */package com.example.jk.a01hello;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;public class MyActivity extends Activity { private Button btn; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //调用父类的功能 LinearLayout hlayout; hlayout = new LinearLayout(this); hlayout.setOrientation(LinearLayout.HORIZONTAL); btn = new Button(this); btn.setText("start OtherActivity"); hlayout.addView(btn); setContentView(hlayout); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MyActivity.this, OtherActivity.class); intent.putExtra("what", "hello others"); //"what"是用于区分参数内容的关键字,接收时使用此关键接收相应的参数值 startActivityForResult(intent, 77); // 77 为request_code } }); } public void onActivityResult(int requestCode, int resultCode, Intent data) { System.out.printf("requestCode:%d, resultCode:%d, data=%s\n", requestCode, resultCode, data.getStringExtra("return")); }}
/* OtherActivity.java */package com.example.jk.a01hello;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;public class OtherActivity extends Activity { private TextView label; private Button btn; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String str = this.getIntent().getStringExtra("what"); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); label = new TextView(this); label.setText("this is other activity : " + str); btn = new Button(this); btn.setText("close"); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setResult(RESULT_OK, new Intent().putExtra("return", "returning string")); finish(); } }); layout.addView(label); layout.addView(btn); setContentView(layout); }}
- 04 Activity窗口间的切换及参数的传递
- 子窗口与父窗口的控制及参数传递
- 实现窗口间的参数传递
- 实现窗口间的参数传递
- pb 窗口间传递参数的方法
- activity直接的参数传递
- activity之间的参数传递
- Activity之间的参数传递
- Activity和多个fragments的切换及数据的传递
- Android之Activity的生命周期和Activity间的切换和数据传递(二)
- Activity的切换动画-overridePendingTransition参数讲解
- Activity间传递参数的四种常用方法
- Activity之间参数传递的方式
- android Activity之间的参数传递
- Activity之间参数传递的方式
- activity参数的正向传递(一)
- Activity之间传递参数的方法
- activity之间传递 intent 类型的参数
- 配置wordpress时出现403 Forbidden nginx/1.10.2
- python3 利用pip安装ipython notebook
- java面试题02
- 微信公众号----微信支付踩坑
- Redis实战(一) 使用缓存合理性
- 04 Activity窗口间的切换及参数的传递
- Java中日期和字符串的互相转化
- linux -my ls
- PAT 甲级 1034. Head of a Gang (30)
- react-native学习之路2项目的导入与导出
- 配置Maven从私服下载构件
- jquery获得table当前行中的所有内容
- 蛇形填数
- AndroidUI控件的自定义属性