android页面间的页面跳转,类似于标签,不同的是android有自己独特的第二种方式,也就是有返回值的startActivityForResult()方式。
1.第一种startActivity()比较简单,只需要在参数列表里传一个Intent对象,指明跳转前后的页
/*有返回值的跳转,还需要一个方法来接受返回值第二个参数为请求码,用于区分不同的跳转,可以根据业务需求自己编号*/
startActivityForResult(intent,1);
Intent intent = new Intent(mContext,IntentTestReturnActivity.class);
startActivity(intent);
Intent的参数列表中要传两个上下文对象,可以直接用 类名.class的形式 ,也可以定义Conext对象,将其传的参数列表中
private Context mContext;
mContext = this;
然后就可以利用Button来实现Activity间的跳转了。
写完回来补充点内容。。
在页面跳转时,后面的页面可以有返回值,同样在跳转时,页面也可以传递给要跳转页面特定的值。
实现:
第一个页面Activity代码:
Intent intent = new Intent(mContext,IntentTestReturnActivity.class);
/*
像后一个页面传值
*/
String ns = "前一个页面传递的消息";
intent.putExtra("primess",ns);
startActivity(intent);
//前一个页面传过来的值
Intent intent = getIntent();
String bdata = intent.getStringExtra("primess");
2.带参数的startActivityForResult()跳转比第一种要复杂,毕竟要涉及参数的传递
大体的过程就是在第一个页面定义好要跳转的两个Activity(这里与第一种类似,用Intent对象指定,然后用startActivityForResult传一个Intent就行了)
Intent intent = new Intent(mContext,IntentTestReturnActivity.class);
startActivityForResult(intent,1);
然后就要指定传递的数据了。android规定要用两个鉴别码来区别不同的跳转(一个app中可能会有多个待参数的跳转,活着一个页面也可能给多个不同的页面返回不同的值,所以要有区分)
/*
有返回值的跳转,还需要一个方法来接受返回值第二个参数为请求码,用于区分不同的跳转,可以根据业务需求自己编号*/
startActivityForResult(intent,1);
在第一个页面中定义onActivityResult()方法来获取返回的值,在这个方法中就要用到
两个鉴别码,通过if判断它们来获取值
在第二个页面来指定返回的值(页面之间的返回值实际为一个Intent对象所以在接受值的时候还有用到getStringExtra()等类似的方法),用setResult()方法来指定返回值的鉴别码和返回它
Intent data = new Intent();
data.putExtra("data",content);//封装好数据
setResult(2,data);
完整代码:
Activity1:
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class IntentTestActivity extends AppCompatActivity {
Button but1,but2;
TextView tv;
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_test);
but1 = (Button)findViewById(R.id.itentbutton1);
but2 = (Button)findViewById(R.id.itentbutton2);
tv = (TextView)findViewById(R.id.itenttv);
mContext = this;
but1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*
mContext:上下文对象,这个方法指定从哪个Activity跳转到哪个,也可以直接用IntentTestActivity.this,但是不能直接用this
*/
Intent intent = new Intent(mContext,IntentTestReturnActivity.class);
startActivity(intent);
}
});
but2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*
mContext:上下文对象,这个方法指定从哪个Activity跳转到哪个,也可以直接用IntentTestActivity.this,但是不能直接用this
*/
Intent intent = new Intent(mContext,IntentTestReturnActivity.class);
/*
有返回值的跳转,还需要一个方法来接受返回值
第二个参数为请求码,用于区分不同的跳转,可以根据业务需求自己编号
*/
startActivityForResult(intent,1);
}
});
}
/*
通过startActivityForResult的跳转,接受返回数据的方法
*/
@Override
/*
requestCode:请求的标志
resultCode:第二个页面返回的标志
data:第二个页面回传的数据
*/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == 2){//通过请求码和返回码区分不同的返回
String content = data.getStringExtra("data");//data:后一个页面putExtra()中设置的键名
tv.setText(content);
}
}
}
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class IntentTestReturnActivity extends AppCompatActivity {
Button but;
private String content = "返回的值";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent_test_return);
but = (Button)findViewById(R.id.itentreturn);
/*
第二个页面返回给第一个页面的实际上是一个Intent对象
*/
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 返回的Intent
Intent data = new Intent();
//键名=>键值的形式
data.putExtra("data",content);//封装好数据
/*
resultContent:返回标识符,区分不同的返回
data:返回的Intent对象(数据)
*/
setResult(2,data);
// 结束当前页面
finish();
// 至此返回值已经就绪,需要在前一个页面去接受
}
});
}
}