iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Mobile Development

Android 新手入門學習系列 第 9

Day9 Android - Intent(換頁)的基礎上->A頁面傳值(bundle)至B頁面

繼昨天講完了Intent(換頁),今天主要要講bundle(傳值)的部分,接續昨天設計完的程式再來加以設計。

Bundle

昨天講的intent用一個比喻來說的話,比較像是交通工具,就像是我今天從A地搭飛機至B地,飛機是交通工具,也可以把她想成intent,而準備的行李,就可以把他想成bundle,也就是bundle這個應用,intent是必要的,那麼就開始設計bundle的部分。

那麼今天就來設計一個簡單的註冊、登入,首先先宣告三個資料:使用者名稱、帳號、密碼,首先先看到布局的圖。

布局

https://ithelp.ithome.com.tw/upload/images/20210814/201392591AroJDGU5a.png
註冊頁-程式碼:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/ConstraintLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="159dp"
        android:layout_height="48dp"
        android:background="@color/purple_200"
        android:text="註冊"
        android:textSize="20dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.543" />

    <EditText
        android:id="@+id/editTextTextPersonName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="152dp"
        android:layout_marginTop="116dp"
        android:ems="10"
        android:inputType="textPersonName"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editTextTextEmailAddress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="152dp"
        android:layout_marginTop="196dp"
        android:ems="10"
        android:inputType="textEmailAddress"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editTextTextPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="152dp"
        android:layout_marginTop="272dp"
        android:ems="10"
        android:inputType="textPassword"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="134dp"
        android:layout_height="39dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="120dp"
        android:gravity="center"
        android:text="使用者名稱:"
        android:textSize="18dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="112dp"
        android:layout_height="39dp"
        android:layout_marginStart="40dp"
        android:layout_marginTop="200dp"
        android:gravity="center"
        android:text="帳號:"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="112dp"
        android:layout_height="39dp"
        android:layout_marginStart="40dp"
        android:layout_marginTop="276dp"
        android:gravity="center"
        android:text="密碼:"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

https://ithelp.ithome.com.tw/upload/images/20210814/20139259VziA2ldvFk.png
登入頁-程式碼:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <EditText
        android:id="@+id/editTextTextEmailAddress2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="108dp"
        android:layout_marginTop="140dp"
        android:ems="10"
        android:inputType="textEmailAddress"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editTextTextPassword2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="108dp"
        android:layout_marginTop="244dp"
        android:ems="10"
        android:inputType="textPassword"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="68dp"
        android:layout_height="25dp"
        android:layout_marginTop="148dp"
        android:layout_marginEnd="4dp"
        android:gravity="center"
        android:text="帳號:"
        android:textSize="20dp"
        app:layout_constraintEnd_toStartOf="@+id/editTextTextEmailAddress2"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="68dp"
        android:layout_height="25dp"
        android:layout_marginTop="252dp"
        android:layout_marginEnd="4dp"
        android:gravity="center"
        android:text="密碼:"
        android:textSize="20dp"
        app:layout_constraintEnd_toStartOf="@+id/editTextTextPassword2"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button2"
        android:layout_width="139dp"
        android:layout_height="48dp"
        android:layout_marginStart="136dp"
        android:layout_marginTop="340dp"
        android:text="登入"
        android:textSize="20dp"
        android:background="@color/purple_200"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

程式-MainActivity

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EditText u = findViewById(R.id.editTextTextPersonName);
        EditText a = findViewById(R.id.editTextTextEmailAddress);
        EditText p = findViewById(R.id.editTextTextPassword);
        Button B = findViewById(R.id.button);
        B.setOnClickListener(new View.OnClickListener() {    //因為我的Button名稱宣告是B,所以是監聽按鈕B
            @Override
            public void onClick(View v) {
                String username=u.getText().toString();//取得資料(getText)轉為string型態
                String account=a.getText().toString();
                String password=p.getText().toString();
                //如果有其中一筆資料去除空格(trim)==""(空值)成立的話,結果會反向(false)為不進入if,若都為false則為有資料=true
                if(!(("".equals(username.trim())) || ("".equals(account.trim())) || ("".equals(password.trim())))){
                    Toast.makeText(MainActivity.this, "註冊成功", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent();//新增交通工具
                    intent.setClass(MainActivity.this, Activity2.class);//目的地
/*************************************bundle片段*******************************************/
                    Bundle bundle = new Bundle();//新增行李箱(存放資料)
                    bundle.putString("username_key",username);//行李的東西(資料,取值用key)
                    bundle.putString("account_key",account);
                    bundle.putString("password_key",password);
                    intent.putExtras(bundle); /******************************************************************************************/
                    startActivity(intent);
                }
                else
                    Toast.makeText(MainActivity.this, "註冊失敗", Toast.LENGTH_SHORT).show();
            }

        });
    }
}

這是MainActivity的程式碼,可以看到bundle傳入三個key值的資料,當然另外還有putInt之類的型態可以傳入,最後利用putExtras這個方法把所有傳入的東西包裝起來,在startActivity(intent)就會傳過去了,另外我有寫了如果其中有資料未填入的話,則會toast出註冊失敗且不跳頁。


程式-Activity2

public class Activity2 extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.page2);
        Button B=findViewById(R.id.button2);//登入按鈕
        EditText a=findViewById(R.id.editTextTextEmailAddress2);
        EditText p=findViewById(R.id.editTextTextPassword2);
        /***************************bundle取值*******************************/
        Bundle bundle = getIntent().getExtras();//取得前一個activity放進來的資料
        String account_register=bundle.getString("account_key");//用你剛剛設的key去取資料
        String password_register=bundle.getString("password_key");
        String username_register=bundle.getString("username_key");//使用者名稱
        /*******************************************************************/
        B.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String account_login=a.getText().toString();//此activity登入的資料
                String password_login=p.getText().toString();
                if(account_login.equals(account_register) && password_login.equals(password_register))//比對資料
                {
                    Toast.makeText(Activity2.this,username_register+"登入成功",Toast.LENGTH_SHORT).show();
                }
                else
                    Toast.makeText(Activity2.this,"登入失敗",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

可以透過getIntent().getExtras()來取得所有傳入的資料,再透過getString(key)來取key對應輸入的資料。
另外其他就是一些比對資料相同的動作。

成果:

https://ithelp.ithome.com.tw/upload/images/20210814/20139259vWT8ilNHwI.jpg

https://ithelp.ithome.com.tw/upload/images/20210814/2013925961czSiTmd6.jpg

https://ithelp.ithome.com.tw/upload/images/20210814/20139259hCyj5hq0bE.jpg


上一篇
Day8 Android - 切換頁面(Intent)
下一篇
Day10 Android - Toast快顯元件
系列文
Android 新手入門學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言