Activity之间的跳转

在Android中Activity是通过Intent来进行跳转的(初学者可以理解Intent是一种“意图”,它抽象的表示你想要做什么事),那么究竟何如具体实现跳转呢?

    首先我们有一个意图(Intent),具体想做的事情是从当前的Activity跳转到另一个Activity(Activity.this,OtherActivity.class),good!这样我的就得到了一个Intent实例

    Intent i = new Intent(Activity.this,OtherActivity.class);

    有“想法”是没有用的,必须要有“行动”才行。  Activity中提供了一个startActivity(Intent i),通过该方法我们就可以让一个跳转的“行动”起来了!

    示例 :
    MainActivity类
package com.example.lowp.intent_getdata_and_senddate_test;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建一个Intent实例
                Intent i = new Intent(MainActivity.this, OtherActivity.class);
                //实现跳转
                startActivity(i);
            }
        });

    }

}
效果:

android Intent 跳转下载 intent跳转activity_android Intent 跳转下载

Activity之间的传参

Activity之间传递参数可以分为两种形式,一种是当前Activity向下一个Activity传递参数;另一种是当前Activity向上一个Activity传递参。多个Activity之间通过Intent携带参数。    

    一,当前Activity向下一个Activity传递参数
    Android中Intent提供了putExtra(String name, xxx)(类似于Map(Key,value)),通过该方法我们就可以让Intent实例携带一些不同类型的数据了。对应的,Intent提供了getxxxExtra(String name)来根据名称来获取对应的数据。
    具体实现:
    1.传递参数(MainActivity中)

    i.putExtra("data","fromMainActivity");

    2.接受参数(OtherActivity中)

    Intent i = getIntent();
    String str = i.getStringExtra("data");

    注:通过getIntent()方法,方可接收传递过来的Intent

    代码:
    MainActivity类:
package com.example.lowp.intent_getdata_and_senddate_test;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建一个Intent实例
                Intent i = new Intent(MainActivity.this, OtherActivity.class);
                //设置携带参数
                i.putExtra("data","fromMainActivity");
                //实现跳转
                startActivity(i);
            }
        });

    }

}
OtherActivity类:
package com.example.lowp.intent_getdata_and_senddate_test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 * Created by Lowp on 2015/9/9.
 */
public class OtherActivity extends Activity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other);

        textView = (TextView)findViewById(R.id.textview2);
        textView.setText("test");
        //获取项目中的Intent
        Intent i = getIntent();
        //通过“键”获取其对应值
        String str = i.getStringExtra("data");

        textView.setText(str);

    }
}
效果图:

android Intent 跳转下载 intent跳转activity_android Intent 跳转下载_02

可以看到在OtherActivity中显示的不是“test”,而是从MainActivity传递过来的“fromMainActivity”。

    二,当前Activity向上一个Activity传递参数
    在开发中,有这种情况,比如说我们的一个Activity要调用一个新的Activity,让后用户对新的Activity操作完成后,关闭新的Activity,这时需要将新的Activity中的一些值传递给旧的Activity。这就中情况不用自己处理,Android已经为我们编写了一个onActivityResult(int requestCode, int resultCode, Intent data)方法,专门处理这种情况。
    首先,在旧的Acitvity中的启动Intent方法不能再使用之前的startActivity,而要给用startActivityForResult(Intent intent, int requestCode)方法,该方法第一个参数为要传递的intent,第二个参数为请求码,该请求码其实就是一个任意的整型变量,用于指明是那个方法、或者说是那个控件启动了该intent,其最主要的目的是在onActivityResult(int requestCode, int resultCode, Intent data)方法中使用。该方法被重写,用来接收上一个Activity返回数据,初学者这里可以不用深究,看到例子后就明白是怎么回事了

    MainActivity类:
package com.example.lowp.intent_getdata_and_senddate_test;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private Button button;
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.textview);

        button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建一个Intent实例
                Intent i = new Intent(MainActivity.this, OtherActivity.class);
                //设置携带参数
                i.putExtra("data","fromMainActivity");
                //实现跳转
//                startActivity(i);
                startActivityForResult(i,1);
            }
        });


    }

    /**
     * 通过startActivityForResult跳转,接收返回数据的方法
     * requestCode 请求标识符
     * resultCode 下一个Activity返回的标识
     * data 下一个Activity回传的数据
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //判断请求码和返回码
        if(requestCode == 1 && resultCode == 2){
            //通过参数名获取对应的值
            String s = data.getStringExtra("fromOtherActivity").toString();
            textView.setText(s);

        }

    }
}
OtherActivity类:
package com.example.lowp.intent_getdata_and_senddate_test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 * Created by Lowp on 2015/9/9.
 */
public class OtherActivity extends Activity {

    private TextView textView;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other);

        textView = (TextView) findViewById(R.id.textview2);
        textView.setText("test");
        button = (Button) findViewById(R.id.button2);

        //获取项目中的Intent
        Intent i = getIntent();
        //通过“键”获取其对应值
        String str = i.getStringExtra("data");

        textView.setText(str);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /**
                 * 回传数据
                 */
                Intent intent = new Intent();
                intent.putExtra("fromOtherActivity", "hello ,Maintivity!");
                setResu(2, intent);
                finish();   

          }

        });

    }
}
效果:

android Intent 跳转下载 intent跳转activity_Activity_03

可以看到,MainActivity中的”this is MainActivity“在从OtherActivity返回后,变成了”hello,MainActivity!“

    源码下载