记android学习之路----Activity(4)----Activity之间的跳转与数据传递
来源:互联网 发布:莎莎源码的解压密码 编辑:程序博客网 时间:2024/05/20 06:09
Activity的跳转和数据传递
Activity跳转的类型
activity之间的跳转有两种情况:
1:无参跳转:Activity之间跳转的时候并不传递数据;
2:含参跳转:Activiy在跳转的过程中同时传递数据;
接下来,具体看一下各种情况:
无参跳转
无参跳转只是通过activity去启动另一个activity,但是并不会携带参数!
1:通过显式的intent跳转
ActivityA:
核心代码:
Intent intent = new Intent(ActivityA.this,ActivityB.class); startActivity(intent);
具体代码:
ActivityA:
ActivityA.java:
package com.example.lk.myactivityceshi;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;public class ActivityA extends Activity { Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_a); button = (Button) findViewById(R.id.buttona); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ActivityA.this,ActivityB.class); startActivity(intent); } }); }}
activity_a.xml:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.lk.myactivityceshi.ActivityA"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="ActivityA页面" android:textSize="75dp" android:id="@+id/textView" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="63dp"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转至ActivityB" android:textSize="50dp" android:id="@+id/buttona" android:layout_marginBottom="63dp" android:layout_alignParentBottom="true" android:layout_alignParentStart="true"/></RelativeLayout>
ActivityB.java:
package com.example.lk.myactivityceshi;import android.app.Activity;import android.os.Bundle;/** * Created by Administrator on 2016/11/21 0021. */public class ActivityB extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_b); }}
activity_b.xml:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.lk.myactivityceshi.ActivityA"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="ActivityB页面" android:textSize="75dp" android:id="@+id/textView" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="63dp"/></RelativeLayout>
2:通过隐式的intetn跳转—仅仅限制action
核心代码:
Intent intent = new Intent("and.intent.action.MY_ACTION");startActivity(intent);
注:在本次跳转中只限制了要跳转的目标Activity的action;只要符合该action的activi都会响应!
实例
代码:和上面的代码一致,仅仅是ActivityA需要做修改:
package com.example.lk.myactivityceshi;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;public class ActivityA extends Activity { Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_a); button = (Button) findViewById(R.id.buttona); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //在此处要修改 Intent intent = new Intent("android.intent.action.MY_ACTION"); startActivity(intent); } }); }}
AndroidManifest.xml:
<activity android:name=".ActivityB"> <intent-filter> //在此处自定义action <action android:name="android.intent.action.MY_ACTION"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
3:通过隐式inent跳转—限制action和category
核心代码:
Intent intent = new Intent("and.intent.action.MY_ACTION");intent.addCtegory("and.intent.category.MY_CATEGORY");startActivity(intent);
注:在本次跳转中设置了两个跳转条件,两个条件都满足的activit就会响应本次跳转!
如果category被设置为default.则同样不用设置addCategory();
具体实例:
AndroidManifest.xml:
<activity android:name=".ActivityB"> <intent-filter> //在此处自定义action <action android:name="android.intent.action.MY_ACTION"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.ABC"/> </intent-filter> </activity>
ActivityA.java
public void onClick(View v) { Intent intent = new Intent("android.intent.action.MY_ACTION"); intent.addCategory("android.intent.category.ABC"); startActivity(intent); }
4:通过隐式intent跳转—-传入参数
核心代码:
Intetn intent = new Intent("and.intent.action.MY_ACTION");intent.addCategory("and.intent.category.MY_CATEGORY");intent.setData(Uri.parse("http://www.baidu.com"));startActivity();
注:1在本次跳转中设置了两个跳转条件,并且向目标activity中传入了uri参数,在第二节Activity的注册中讲了一个activity是可以设置他能够响应的uri类型的;
2 在目标activity中,我们设置其and:scheme=”http”,则该activity在满足action/category匹配的情况下,也要求传入的uri参数是http请求,其才能响应!
但是注意;我们设置这个activity可以响应http请求,但是这个activity并不能加载web页面,仅做测试用!
实例:加载web页面/拨打电话;
实例:
加载一个web页面:
#############
转向拨号页面:
拨号页面
5:含参跳转:
在这种情况下,两个activity的切换会为彼此传入参数;
1:A–>B:将数据传入B页面,但是不用接收B页面的数据;
A:的核心代码:
Intent intenta = Intent(ActivityA.this,ActivityB.class); String aimData = "来自A页面的数据"; intent.putExtra("data",aimData); startActivity(intenta);
B:的核心代码:
//获取A页面传过来的数据 Intent intentb = this.getIntent(); String rcvData = intentb.getStringExtra("data");
2:A–>B:由A去启动B,并向B传入数据,同时接收由B返回的数据
A:的核心代码:
Intent intenta = Intent(ActivityA.this,ActivityB.class); String aimData = "来自A页面的数据"; intent.putExtra("data",aimData); startActivityForResult(intenta,cource_ok); //接收数据 public void onActivityResult(int request_code,int result_code,Intent data){ switch(request_code){ case 1: if(result_code == result_ok){ String resultString = data.getStringExtra("data_return"); Log.i("returnData",resultString); } } }
B:的核心代码:
//获取A页面传过来的数据 Intent intentb = this.getIntent(); String rcvData = intentb.getStringExtra("data");
B向A页面返回数据:
Intent intentc = new Intent(); String returnData = "来自B页面返回的数据"; intentc.putExtra("data_return",returnData); setResult(result_ok,intentc); finish();
注:
//在ActivityB中如果不是点下按钮返回A,而是按下返回键,则可拦截返回按钮的点击事件: public void onBackPressed(){ Intent intentc = new Intent(); String returnData = "来自B页面返回的数据"; intentc.putExtra("data_return",returnData); setResult(result_ok,intentc); finish(); }
- 记android学习之路----Activity(4)----Activity之间的跳转与数据传递
- activity之间的跳转与数据传递
- Android学习系列之(五)Activity之间的数据传递
- Android之Activity之间的数据传递
- android初步实现Activity之间的跳转和数据传递
- activity之间的跳转及传递数据
- Activity之间的跳转以及数据传递
- Activity之间的跳转以及数据传递
- [Android新手学习笔记05]-如何进行活动Activity之间的跳转以及数据传递
- Android 学习之路一:Activity之间传递数据的四种方式
- android学习笔记之七在Activity之间传递数据
- android学习之不同activity之间传递数据
- Activity与Fragment数据传递之Activity之间获取数据
- Android-Activity与Fragment之间传递数据
- android开发之 Activity之间数据传递
- Android 开发之Activity之间传递数据
- Android 开发之activity之间传递数据
- android 开发之activity之间传递数据
- android下面通过ndk建立一个虚拟触摸屏设备可以被sendevent调用
- Android Drawable 进阶篇
- js string()常用方法总结
- 算法优解(10)-合并两个有序的单链表
- android listview 异步加载图片并防止错位
- 记android学习之路----Activity(4)----Activity之间的跳转与数据传递
- PIC单片机精通_A/D转换&异步串口通讯实例与详解
- web分布式方案
- codeforces 738D Sea Battle 思维+构造
- Java——>IO
- file结构中的private_data
- 自定义View(一):初认识自定义Veiw
- Laravel timestamps 设置为unix时间戳
- 项目管理进阶--软件开发项目中的团队组成