用Intent串聯起多個Activity

前文中我們創建了一個非常簡單的應用,可以處理一些用戶的輸入。這個應用還只有一個Activity,要做更多的事這是不夠的。市面上只有一個Activity的應用不是沒有,但是真的不多。更多的都是多個Activity的應用。現在我們就來寫一個多個Activity的應用。

首先創建一個新的Activit。在某個package下右擊,會彈出一個菜單。在菜單中選擇New->Activity->Empty Activity。之后參考上文,填寫Activity名稱,其他內容保持不變。這第一個Activity就叫做LoginActivity。具體如下圖:

然后再建一個Activity叫做HomeActivity。這樣來模擬一個用戶在登錄頁面輸入登錄信息,驗證正確之后進入主頁面的過程。

布局

兩個Activity都建立好以后,咱們來app/res/layout/目錄下看看activity_login.xmlactivity_home.xml兩個布局界面。首先是LoginActivity的布局。這個頁面需要一個輸入用戶名和密碼的輸入框和一個登錄按鈕。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_fifth_day"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.a31day.fifthDay.LoginActivity">

    <EditText
        android:id="@+id/username_edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="用戶名" />

    <EditText
        android:id="@+id/password_edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:hint="密碼" />

    <Button
        android:id="@+id/login_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="Login" />

</LinearLayout>

登錄頁面用的根布局是LinearLayout這個在上文中也使用過,這是一個相對簡單的布局。LinearLayout會根據控件在布局中的位置從上到下依次展示出來。所以,從上到下的視圖依次是用戶名密碼登錄按鈕。我們現在不需要更多的關心布局的問題。

在看HomeActivity的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_home"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.a31day.fifthDay.HomeActivity">

    <TextView
        android:id="@+id/home_textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="30sp" />\

</LinearLayout>

這個頁面是相當的簡單啊。在這個布局有一個TextView,這個是用來顯示文本內容的。這個TextView中會顯示一個字符串Hello 某某某。這就一眼能看出來登錄成功,進入了主界面。

代碼

在代碼準備階段,首先獲取布局中的視圖:

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

        final EditText userNameEditText = (EditText)findViewById(R.id.username_edittext);
        final EditText passwordEditText = (EditText)findViewById(R.id.password_edittext);
        Button loginButton = (Button)findViewById(R.id.login_button);

        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 獲取用戶輸入的用戶名、密碼
                String userName = userNameEditText.getText().toString();
                String password = passwordEditText.getText().toString();

                // 檢查用戶輸入的用戶名和密碼是否正確

                // 如果檢查正確,跳轉到另外一個Activity
            }
        });
    }

獲取視圖在上文有講過,關鍵是在布局的時候設定了視圖的ID,就是這句:android:id="@+id/activity_home"。之后在代碼中通過ID獲取到視圖:findViewById(R.id.username_edittext)

獲取到視圖之后,需要做一個操作:強制類型轉換。因為拿到的視圖是一個通用的視圖,有一些功能不具備。所以還要這么一步:(EditText)findViewById(R.id.username_edittext)。就是放在findViewById這個方法前面的(EditText)(Button)。有了這個東西以后視圖才能成為我們需要的可用的視圖。

然后才可以使用這句:String userName = userNameEditText.getText().toString();獲取到用戶名,和后面的獲取密碼,和設置按鈕的點擊處理代碼。

跳轉到另外一個Activity

設定按鈕的點擊處理代碼的時候,我們暫時不用管用戶名、密碼檢驗的問題。假設輸入啥用戶名、密碼都是對的。然后就直接跳轉到另外一個Activity去。

Activity的跳轉是用Intent來完成的。Intent就是意圖的意思,一個Activity隊另一個Activity有意思了,就像跳過去。就是這么回事兒。所以,需要在Intent里指定好了是從哪個Activity 跳到另外的哪個Activity去。

Intent go = new Intent(LoginActivity.this, HomeActivity.class);
startActivity(go);

LoginActivity.this就是指定Intent是從哪個Activity出發。HomeActivity.class指定Intent跳轉去哪個Activity。這不就是登錄,登錄之后跳轉去主界面Activity么。就是這么用Intent的。最后startActivity方法,并把Intent的實例做為參數傳入這個方法就可以完成跳轉到其他的Activity了。

完成的代碼:

loginButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 獲取用戶輸入的用戶名、密碼
        String userName = userNameEditText.getText().toString();
        String password = passwordEditText.getText().toString();

        // 檢查用戶輸入的用戶名和密碼是否正確

        // 如果檢查正確,跳轉到另外一個Activity
        Intent go = new Intent(LoginActivity.this, HomeActivity.class);
        startActivity(go);
    }
});

總結

Android應用的開發一般來說都是第一布局第二代碼。布局寫完,在預覽中查看沒有問題,開始代碼處理界面的展示和處理用戶的輸入。

更具體的來概括一下:

  1. 在布局中使用的各種TextView, EditTextButton等視圖,如果需要在代碼中獲取并使用,就需要設定ID, 如:android:id="@+id/activity_home"
  2. 在代碼中使用視圖的時候通過方法findViewById取得視圖,并把類型轉化成布局里視圖對應的類型,如EditText userNameEditText = (EditText)findViewById(R.id.username_edittext);
  3. 給按鈕設置點擊處理代碼:
        // 先拿到對應的視圖
        Button loginButton = (Button)findViewById(R.id.login_button);
        // 設定點擊處理代碼
        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 按鈕點擊處理代碼在這里
            }
        });
  1. 跳轉Activity:
 Intent go = new Intent(LoginActivity.this, HomeActivity.class);
 startActivity(go);

Stay tuned to my next episode

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容