Android中实现activity的页面跳转并传值
来源:互联网 发布:java中文api 编辑:程序博客网 时间:2024/06/05 14:43
本次我们就讲一下,Android中页面跳转以及传值的几种方式!
Activity跳转与传值,主要是通过Intent类来连接多个Activity.
1. Intent显式意图
(1) 最常见最一般的页面跳转代码,很简单,如下:
Intent intent = new Intent(A.this, SecondActivity.class);startActivity(intent);
也可以这样写:
Intent intent = new Intent(); intent.setClass(A.this, SecondActivity.class);startActivity(intent);
(2) 当然,你需要新建一个SecondActivity的界面,并继承activity,重写onCreate方法:
1 public class SecondActivity extends Activity {2 3 @Override4 protected void onCreate(Bundle savedInstanceState) {5 super.onCreate(savedInstanceState);6 setContentView(R.layout.activity_second);7 }8 9 }
(3) 当然新建了一个activity后记得在清单文件中进行注册.
(4) 在onCreate方法里设置布局文件: R.layout.activity_second,所以需要在res目录下新建
这样就可以使用显示意图实现页面跳转了.
2.隐式意图
隐式意图与显式意图在写法上有以下几点不一样:
(1) 在清单文件中注册需要加意图过滤器
1 <activity android:name="com.example.intent.SecondActivity"> 2 <intent-filter > 3 4 <action android:name="com.google.open02"/> 5 6 <!-- 一般配置 隐式意图 的时候就需要写 category 7 表示用在 默认的设备中 (默认的运行在 手机中 的) --> 8 9 <category android:name="android.intent.category.DEFAULT"></category>10 11 <data android:scheme="haha" />12 <data android:mimeType="image/jpeg"/>13 <data android:host="www.google.com"/>14 </intent-filter>15 </activity>
(2) 在创建Intent对象时:
1 Intent intent = new Intent();2 3 intent.setAction("com.google.open02");4 5 intent.addCategory("android.intent.category.DEFAULT");6 7 intent.setDataAndType(Uri.parse("haha://www.google.com"), "image/jpeg");8 9 startActivity(intent);
这里需要注意一点:
data和type可以单独使用,但是他俩是互斥的
也就是说,使用了data就不能使用type,这个看API可以知道
如果想同时使用他俩的话,就需要用setDataAndType方法
注意: 隐式意图必须包含动作(action),以及数据(data)
3. 显式意图和隐式意图的区别
- 显式意图: 一般用于激活应用程序内部的
- 隐式意图: 一般用于激活其他应用程序的组件
4. 数据传递
(1) 要想实现在页面跳转的同时传递数据,只需要用一个方法即可:putExtra()
1 Intent intent = new Intent(this, SecondActivity.class);2 intent.putExtra("name", et_name.getText()+"");3 startActivity(intent);
(2) 如果要传递复杂一点的数据,如图片:
putExtra可以传递一个Parcelable对象,而图片的bitmap是Parcelable的子类
所以可以这样操作:
1 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.logo);2 intent.putExtra("pic", bitmap);
5. 数据接收
1 // 首先获取到意图对象2 Intent intent = getIntent();3 4 // 获取到传递过来的姓名5 String name = intent.getStringExtra("name");6 7 // 获取到传递过来的图片8 Bitmap bitmap = intent.getParcelableExtra("pic");
6. startActivityForResult
如果用正向传递的方式是可以实现数据的回归的,但是这样做的坏处是开启了很多个Activity累积到栈中,当点击返回的时候就会逐一打开之前的Activity,这样的用户
体验是非常不好的,所以通过数据的反向传递的方式保证Activity只有当前的一个,当用户点击返回时可以直接退出。
下面以一种需求为例,讲解startActivityForResult,发送短信小助手:
用户点击"选择模板"跳到短信模板的界面,然后点击某一条短信,直接将选择的短信返回到页面中
主界面:
选择模板短信的界面:
选择联系人界面:
这里的列表是用listview来做的,点击对应的listview可以将结果返回到主界面中.
以下是两个按钮点击事件的代码:
1 /** 2 * 选择短信模板 3 * @param view 4 */ 5 public void selectSms(View view){ 6 //点击后跳转到短信模板界面 7 Intent intent = new Intent(this, SmsActivity.class); 8 9 //两个参数:Intent intent 意图对象10 //int requestCode 请求码11 startActivityForResult(intent, 2);12 }13 /**14 * 选择收信人15 */16 public void addContacts(View view) {17 // 点击后跳到联系人列表界面18 Intent intent = new Intent(this, ContactsActivity.class);19 20 //为了一个结果 去启动另外的一个 activity 界面 21 startActivityForResult(intent, 1);22 }
注意: 还需要重写onActivityResult()方法,来接收返回的数据
示例代码如下:
1 @Override 2 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 3 super.onActivityResult(requestCode, resultCode, data); 4 5 // resultCode : 结果码, 用来鉴别 到底是 哪个 结果 ... 6 if (data != null) { 7 if (resultCode == 1) {// 说明是联系人的返回结果 8 contact = data.getStringExtra("contact"); 9 et_contact.setText(contact);10 }else if(resultCode == 2){//说明是短信模板的返回结果11 sms = data.getStringExtra("sms");12 et_content.setText(sms);13 }14 }15 }
以下是短信模板的示例代码:
1 public class SmsActivity extends Activity { 2 3 String [] sms = {"短信1","短信2","短信3","短信4"}; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_sms); 8 9 ListView lv_sms = (ListView) findViewById(R.id.lv_sms);10 11 lv_sms.setAdapter(new ArrayAdapter<String>(this, R.layout.item_sms, sms));12 13 lv_sms.setOnItemClickListener(new OnItemClickListener() {14 15 @Override16 public void onItemClick(AdapterView<?> parent, View view,17 int position, long id) {18 19 String template = sms[position];20 21 Intent data = new Intent();22 23 data.putExtra("sms", template);24 25 //int resultCode, 结果码,用于区分到底是哪个的返回数据26 //Intent data 27 setResult(2, data);28 29 finish();30 }31 });32 }33 34 }
好了,关于页面跳转就先介绍到这里.
- Android中实现activity的页面跳转并传值
- Android实现两个Activity界面的跳转并传值
- android Intent实现Activity之间跳转并传值
- Android Intent实现Activity之间跳转并传值
- Android Intent实现Activity之间跳转并传值
- Android Activity页面跳转实现
- Android中页面传值(从跳转到的Activity回到跳转前的Activity,如何保留前一Activity的数据)
- JS实现页面跳转并传值
- Android页面跳转实现方法:activity&TabActivity
- Android中Activity和Fragment页面跳转
- Android实现Activity的跳转
- Android 实现页面跳转并传递参数
- android 中 多个Activity 的跳转 与传值
- Android中Activity之间的跳转与传值
- android中Activity的跳转
- Android中Activity的跳转
- Android 中 Activity的跳转
- Android中页面跳转,并传递信息
- C++中的内存泄露
- Android开发中实现https校验
- Spark 介绍
- Android中handler机制的原理
- Android四大组件之---activity生命周期详解
- Android中实现activity的页面跳转并传值
- 基于spark的多模型融合的推荐系统
- Activity的四种启动模式
- Android中广播接收者BroadcastReceiver详解
- Android中常见的对话框
- Android四大组件之一 -- Service详解
- Java调用Oracle存储过程应该加上花括号
- Android中为什么需要服务?
- sed 文本编辑命令