---
###### tags: `Android studio`
---
[TOC]
Android studio-頁面轉換
===
實作
---
### 第一步
●首先需要在新增一個Activity
在project的位置點擊右鍵,之後再New>>Activity>>點選Empty Activity

### 第二步
●點擊Empty Acvivity後會出現↓以下頁面↓直接按Finish可以

### 第三步
●接下來開啟MainActivity.java的檔案在app>>java>>com.example.....>>點擊開啟MainActivity.java
在public class MainActivity extends AppCompatActivity
{裡面加入
```
public void click(View view)
{
Intent it new Intent(MainActivity.this,Main2Activity.class);
startActivity(it);
finish();
}
```
}
!!現紅字為沒匯入Library"滑鼠移到紅字會出現提示"Alt+Enter"會自動加上宣告!!
<style>
.red {
color:#FF0202;
}
</style>
**<span class="red">最後須有"}"</span>** ↓下圖為示例↓

### 第四步
●接下來開啟activity_main.xml檔案在app>>res>>layout>>點選activity_main
開啟檔案後從旁邊元件欄位把"Button"拖曳至版面
接下來在旁邊Attributes裡的Declared Attributes旁邊的"+"
在新增的欄位打上"onClick"選擇android:onClick
然後"點擊"旁邊的欄位會出現下拉式選單>>選擇click

### 第五步
●接下來開啟剛開始新增的Activity(預設名稱Main2Activity<可能會因為版本不同導致預設的名字不一樣>)
試著做跟前面的MainActivity.java一樣的動作(第三步)
在public class Main2Activity extends AppCompatActivity
{裡面加入
```
public void click2(View view)
{
Intent it new Intent(Main2Activity.this,MainActivity.class);
startActivity(it);
finish();
}
```
}
不同的是
public void click2(View view)
Intent(Main2Activity.this,MainActivity.class);
!!現紅字為沒匯入Library"滑鼠移到紅字會出現提示"Alt+Enter"會自動加上宣告!!

### 第六步
●最後在剛開始新增的activity_main2.xml做跟前面Activity_main.xml一樣的動作(第四步)

程式碼解析
---
### Activity
```
package com.example.changepage;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View view)
{
Intent it = new Intent(MainActivity.this,MainActivity2.class);
startActivity(it);
finish();
}
}
```
<style>
.purple {
color:#7A0099;
}
</style>
package com.example;<span class="purple">這一行的作用是指出這個檔案所在的命名空間,package(套件)是關鍵字,如果我們寫了一個java檔案,其他的檔案要引用到他的class或class內的方法,就需要</span>
```
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
```
<span class="purple">程式中預設導入這兩個套件,幾乎所有的Android應用程式都會用到這兩個套件, Android平臺支援的package主要因為手機系統特性與程式碼授權的考量,與標準版的Java支援的package不盡相同。在設計Android應用程式時,常常需要參考可用的API列表,完整的API可以查閱官方支援的package列表
https://developer.android.com/reference/packages</span>
public class MainActivity extends AppCompatActivity{}<span class="purple">MainActivity是這個類別的名稱,extends表示MainActivity這個類別的功能、型別等全繼承自AppCompatActivity類別。
整句話的意思是 宣告一個公開的MainActivity類別。這個MainActivity類別繼承了程式開頭導入的AppCompatActivity類別。</span>
protected void onCreate(Bundle savedInstanceState){}<span class="purple">onCreate是這個方法的名稱,void表示不需任何回傳值,這個方法導入了一個名為savedInstanceState(儲存實體狀態)的Bundle型別參數,Bundle型別正是我們前面所導入的package之一,Bundle的內容與Android手機平臺的記憶體管理有關。
Bundle類別可以保存Activity上一次關閉(stop)時的狀態,我們可以透過覆載onStop方法來保存關閉前的狀態,當程式啟動時,會再次呼叫onCreate方法,就能從savedInstanceState中得到前一次凍結的狀態。
我們也可以透過Bundle來將這個Activity的內容傳到下一個Activity中</span>
super.onCreate(savedInstanceState);<span class="purple">super是關鍵字,代表這個MainActivity類別的上層類別AppCompatActivity,意思是執行AppCompatActivity類別中onCreate方法的內容,一個Android應用程式,會對應到一個以上的Activity,onCreate方法是每個Activity類別初始化時都會去呼叫的方法。我們想做的是保持原本onCreate方法預設的動作,然後在其中加入我們想要的內容。
因為我們已經覆載(@Override)了MainActivity類別的onCreate方法,因此如果我們想將原本的onCreate方法內容保留,再加上我們自己的內容,就要使用super語句,並傳入savedInstanceState參數。如此就會先執行AppCompatActivity類別的onCreate方法,再執行我們覆載的onCreate方法裡面的其他程式內容。</span>
setContentView(R.layout.activity_main);<span class="purple">螢幕顯示的畫面,是透過各種介面元件的排列配置結構來描述的。要將一套版面配置的層次結構轉換到一個螢幕上時,Activity會呼叫它用來設定螢幕顯示內容的setContentView方法,並傳入定義了版面配置的Xml描述檔。當Activity被啟動並需要顯示到螢幕上時,系統會通知Activity並根據引用的Xml檔來描繪出使用者介面。</span>
public void click(View view){}<span class="purple">建立一個沒有回傳值的公開函數名字取為click(可以取別的名字)</span>
[Intent](/M7FUNQzESpeAEzZNu4FJhA) it = new Intent(MainActivity.this,MainActivity2.class);<span class="purple">這行是
```
Intent it = new Intent();
it.setClass(MainActivity.this , MainActivity2.class);
```
<span class="purple">的簡化版第一行Intent intent = new Intent();是將Intent物件初始化,第二行intent.setClass(MainActivity.this , MainActivity2.class);是使用setClass方法來設定你要前往的Activity。
setClass要丟入兩個參數(第一頁,第二頁)
假設你要從A頁到B頁
就必須輸入 intent.setClass(A.this , B.class);</span>
startActivity(it);
<span class="purple">開始跳往要去的Activity</span>
finish();<span class="purple">結束目前Activity</span>