Activity启动其他的Activity的和传递数据两种方法

来源:互联网 发布:mac dock栏顺序 编辑:程序博客网 时间:2024/05/21 06:59

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>
0 0