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);
}
});
}
}
效果:
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);
}
}
效果图:
可以看到在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();
}
});
}
}
效果:
可以看到,MainActivity中的”this is MainActivity“在从OtherActivity返回后,变成了”hello,MainActivity!“
源码下载