zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

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

Android 页面 多个 之间 返回 跳转 传递 Activity
2023-09-11 14:18:54 时间

一.普通页面跳转

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的按钮点击事件

	@Override
	protected 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() {
			
			@Override
			public 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", "我是参数");
	@Override
	protected 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() {
			
			@Override
			public void onClick(View v) {
				//建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
				Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
				intent.putExtra("key", "我是参数");
				//启动意图
				startActivity(intent);
			}
		});
	}

第二个Activity中的java代码
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);

		TextView tv_second = (TextView) findViewById(R.id.tv_second);
		// 得到Intent
		Intent 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中

	@Override
	protected 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("账号", "密码");

			@Override
			public void onClick(View v) {
				// 建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
				Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
				// 放入需要传递的对象
				intent.putExtra("key", user);
				// 启动意图
				startActivity(intent);
			}
		});
	}


第二个Activity中

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

		TextView tv_second = (TextView) findViewById(R.id.tv_second);
		// 得到Intent
		Intent 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;

	@Override
	protected 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("账号", "密码");

			@Override
			public void onClick(View v) {
				// 建立一个意图,参数为(当前的Activity类对象,需要开的的Activity类)
				Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
				// 放入需要传递的对象
				intent.putExtra("key", user);
				// 启动意图(意图,请求码(int)) 请求码最好使用 final static定义 方便识别
				startActivityForResult(intent, sendUser);
			}
		});
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		// 如果请求码为 sendUser 返回码 为 RESULT_OK RESULT_OK为系统自定义的int值为 -1
		if (requestCode == sendUser && resultCode == RESULT_OK) {
			// 在TextView中设置返回信息
			tv_first.setText(data.getStringExtra("key"));
		}
	}
}

第二个Activity

public class SecondActivity extends Activity {

	private Intent intent;

	@Override
	protected 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() {

			@Override
			public void onClick(View v) {
				// 发送返回数据  key可自己定义,但前后必须一样
				intent.putExtra("key", "接收到数据了,现在通知第一个Activity");
				// RESULT_OK 系统定义的int 值 为-1
				setResult(RESULT_OK, intent);
				// 关闭当前 Activity
				finish();
			}
		});
	}
}
参数传递与返回 需要注意前后的 键 相对应