Android多个Activity之间的页面跳转带参传递与返回

来源:互联网 发布:违规删除恢复权重淘宝 编辑:程序博客网 时间:2024/05/20 23:06

一.普通页面跳转

Activity之间进行跳转需要使用Intent类 Intent 意图

第一个Activity

    <Button        android:id="@+id/btn_open"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="开启新的Activity" />    <TextView        android:id="@+id/tv_first"        android:gravity="center"        android:text="第一个Activity"        android:layout_width="match_parent"        android:layout_height="wrap_content" />


第二个Activity

    <Button        android:id="@+id/btn_back"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="返回第一个Activity" />    <TextView        android:id="@+id/tv_second"        android:gravity="center"        android:text="第二个Activity"        android:layout_width="match_parent"        android:layout_height="wrap_content" />


第一个Activity的按钮点击事件

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);Button btn_open = (Button) findViewById(R.id.btn_open);btn_open.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)Intent intent = new Intent(FirstActivity.this,SecondActivity.class);//启动意图startActivity(intent);}});}
最后别忘记了在AndroidManifest.xml文件中注册Activity
       <activity android:name=".SecondActivity" >
养成习惯,在每次创建新的Activity时,就及时去AndroidManifest.xml注册

二.Activity带参跳转
带参跳转则需要使用 Intent 的 putExtra(键,值)方法来放入参数,然后在第二个Activity中使用 getIntent().get类型Extra(键)来取得值
第一个Activity按钮的点击事件
只比前面多了一行代码  intent.putExtra("key", "我是参数");
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);Button btn_open = (Button) findViewById(R.id.btn_open);btn_open.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)Intent intent = new Intent(FirstActivity.this,SecondActivity.class);intent.putExtra("key", "我是参数");//启动意图startActivity(intent);}});}

第二个Activity中的java代码
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);TextView tv_second = (TextView) findViewById(R.id.tv_second);// 得到IntentIntent intent = getIntent();// 通过key得到值 值为字符串类型String value = intent.getStringExtra("key");// 在TextView上设置 值tv_second.setText(value);}

三.带参传递的参数还可以是对象。
传递对象必须保证对象实现序列化
新建一个User类并实现序列化 Serializable
public class User implements Serializable{/** * 序列化id,建议加上, */private static final long serialVersionUID = 1L;// 用户名private String username;// 密码private String password;public User() {}public User(String username, String password) {super();this.username = username;this.password = password;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

第一个Activity中

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);Button btn_open = (Button) findViewById(R.id.btn_open);btn_open.setOnClickListener(new OnClickListener() {// 得到User类,并赋值User user = new User("账号", "密码");@Overridepublic void onClick(View v) {// 建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)Intent intent = new Intent(FirstActivity.this, SecondActivity.class);// 放入需要传递的对象intent.putExtra("key", user);// 启动意图startActivity(intent);}});}


第二个Activity中

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);TextView tv_second = (TextView) findViewById(R.id.tv_second);// 得到IntentIntent intent = getIntent();// 通过key得到得到对象// getSerializableExtra得到序列化数据User user = (User) intent.getSerializableExtra("key");// 在TextView上设置 用户名和密码tv_second.setText(user.getUsername() + "  " + user.getPassword());}

在传递对象的时候,重点是保证对象实现序列化 Serializable并使用getSerializableExtra得到序列化数据

四.Activity带参返回
启动新的Activity 使用startActivityForResult(intent,requestCode)
必须重写onActivityResult(request,result,data) 方法来获取返回数据启动

第一个Activity

public class FirstActivity extends Activity {// 定义请求码,不同界面的跳转请求码要求不同,为了识别是哪个控件传递数据private final static int sendUser = 1;private TextView tv_first;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_first);Button btn_open = (Button) findViewById(R.id.btn_open);tv_first = (TextView) findViewById(R.id.tv_first);btn_open.setOnClickListener(new OnClickListener() {// 得到User类,并赋值User user = new User("账号", "密码");@Overridepublic void onClick(View v) {// 建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)Intent intent = new Intent(FirstActivity.this, SecondActivity.class);// 放入需要传递的对象intent.putExtra("key", user);// 启动意图(意图,请求码(int)) 请求码最好使用 final static定义 方便识别startActivityForResult(intent, sendUser);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);// 如果请求码为 sendUser 返回码 为 RESULT_OK RESULT_OK为系统自定义的int值为 -1if (requestCode == sendUser && resultCode == RESULT_OK) {// 在TextView中设置返回信息tv_first.setText(data.getStringExtra("key"));}}}

第二个Activity

public class SecondActivity extends Activity {private Intent intent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);TextView tv_second = (TextView) findViewById(R.id.tv_second);intent = getIntent();// 通过key得到得到对象// getSerializableExtra得到序列化数据User user = (User) intent.getSerializableExtra("key");// 在TextView上设置 用户名和密码tv_second.setText(user.getUsername() + "  " + user.getPassword());// 找到按钮,通过点击按钮返回第一个界面Button btn_back = (Button) findViewById(R.id.btn_back);// 点击事件btn_back.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 发送返回数据  key可自己定义,但前后必须一样intent.putExtra("key", "接收到数据了,现在通知第一个Activity");// RESULT_OK 系统定义的int 值 为-1setResult(RESULT_OK, intent);// 关闭当前 Activityfinish();}});}}
参数传递与返回 需要注意前后的 键 相对应


1 0
原创粉丝点击