Android多個Activity之間的頁面跳轉帶參傳遞與返回

一.普通頁面跳轉

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();
			}
		});
	}
}
參數傳遞與返回 需要注意前後的 鍵 相對應


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章