1)通过startActivity(Intent intent)启动Activity。
传递参数的方式:putExtra(“key”,values);
或者putExtras(Bundle);
获取参数的方式:getXxxExtra(key)
或者getExtras().getXxx()
注意:Xxx是数据类型
package com.xspacing.activity;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
/**
* @ClassName MainActivity.java
* @Description TODO activity传递数据
* @author smile
* @version v1.0
* @date 2016年9月29日
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void skip(View v) {
// 第一种intent的写法,最常用的
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
// 第二种
// Intent intent=new Intent();
// intent.setClass(MainActivity.this,SecondActivity.class);
// 第三种
// Intent intent=new Intent();
// ComponentName name=new
// ComponentName(MainActivity.this,SecondActivity.class);
// intent.setComponent(name);
// 第一种封装传递的数据 name, value:键值对的形式存储
intent.putExtra("data", "我是传递的数据");
// 第二种
// Bundle bundle=new Bundle();
// bundle.putString("data", "我是bundle的封装的数据");
// intent.putExtras(bundle);
startActivity(intent);
}
}
package com.xspacing.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
public class SecondActivity extends Activity {
private static final String TAG = "SecondActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second);
initDatas();
}
private void initDatas() {
//对应着第一种封装数据的取数据
Intent intent = getIntent();
String string = intent.getStringExtra("data");
Log.i(TAG, string);
//对应着第二种封装数据的取数据
// Intent intent = getIntent();
// Bundle bundle = intent.getExtras();
// String string = bundle.getString("data");
// Log.i(TAG, string);
}
}
activity_main.xml
<LinearLayout 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:orientation="vertical"
tools:context="com.xspacing.activity.MainActivity" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="skip"
android:text="第一种方法传递数据" />
</LinearLayout>
(2)通过startActivityForResult(Intent intent,int requestCode):
( 以指定的请求码启动Activity,而且程序将会等待新启动Activity的结果。一般情况下,我们只需要保证requestCode>-1即可,这样它都能收到result。但是如果在A activity中,
能够跳转到多个activiity,并且要接受到这多个activity中的信息的时候,我们就要注意了,这时候,requestCode就起大作用了,当你startActiviityForResult()的时候, 给每一个不同的activity一个独立的requestcode,那么在你接受到result的时候就可以通过这个参数来判断,结果是那个acitivity返回来的了)
启动的Activity重写onActivityResult()
被启动的Activity返回数据:setResult(int,Intent).
package com.xspacing.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
/**
* @ClassName MainActivity.java
* @Description TODO activity传递数据
* @author smile
* @version v1.0
* @date 2016年9月29日
*/
public class MainActivity extends Activity {
public static final int REQUEST_CODE = 0x001;
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void skip(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
intent.putExtra("data", "我是传递的数据");
startActivityForResult(intent, REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//根据结果码和请求码判断是否是SecondActivity传递的数据
if (requestCode==REQUEST_CODE&&resultCode==SecondActivity.RESULT_CODE) {
String string = data.getStringExtra("second");
Log.i(TAG, string);
}
super.onActivityResult(requestCode, resultCode, data);
}
}
package com.xspacing.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
public class SecondActivity extends Activity {
private static final String TAG = "SecondActivity";
public static final int RESULT_CODE = 0x002;
private Intent mIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second);
initDatas();
}
private void initDatas() {
mIntent = getIntent();
String string = mIntent.getStringExtra("data");
Log.i(TAG, string);
}
public void back(View v){
if (mIntent==null) {
mIntent=new Intent();
}
mIntent.putExtra("second", "我是第二个activity传递的数据");
setResult(RESULT_CODE, mIntent);
finish();//关闭当前activity,这个不能少不然,SecondActivity依然显示
}
}
activity_main.xml
<LinearLayout 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:orientation="vertical"
tools:context="com.xspacing.activity.MainActivity" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="skip"
android:text="第二种方法带返回值的传递数据" />
</LinearLayout>
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="back"
android:text="返回MainActivity" />
</LinearLayout>