เปิดหน้าใหม่ด้วย Intent

เวลาเราใช้งาน Application ต่าง ๆ ก็มักจะมีเมนูให้เรา กด/สัมผัส เพื่อเปิดไปหน้าอื่น…

ในการเขียนโปรแกรมนั้นแต่ละหน้าของ app เราเรียกว่า Activity
การที่เราจะเปิด Activity อื่นขึ้นมาทำงานได้นั้นเราจะต้องสร้าง Instance จากคลาส Intent
พร้อมกับทำการส่งค่า 2 ค่าไปทาง Constructor คือ
1. Activity หน้าปัจจุบัน (.this)
2. Activity หน้าที่จะเปิด (.class)

จากนั้นก็เรียกใช้เมธอด startActivity(intent) พร้อมกับส่ง instance ที่สร้างขึ้นมาไปด้วย
หลักการมีแค่นี้ค่ะ ถ้าอ่านแล้ว งง ก็เป็นเรื่องปกติ ต้องลงมือทำถึงจะเข้าใจค่ะ ^^

เราจะสร้าง app ขึ้นมาโดยมี 2 หน้าคือ
1. หน้าแรกมีปุ่ม รายละเอียด กดแล้วจะเปิดหน้ารายละเอียดขึ้นมา
2. หน้ารายละเอียด มีปุ่ม Home กดแล้วจะกลับไปหน้าแรก

01-mystou-com-android-intent

โครงสร้างของโปรเจ็กต์เป็นดังนี้

02-mystou-com-android-intent

เริ่มกันเลย ทำการสร้างโปรเจกต์ (project) ตามต้องการนะคะ
ของเราตั้งชื่อโปรเจ็กต์ว่า IntentTest
เมื่อได้โปรเจ็กต์ขึ้นมาแล้วทำการออกแบบหน้าจอให้เรียบร้อย
หลังจากนั้นเปิดหน้า MainActivity.java ขึ้นมา
เขียนโค้ดตามภาพพร้อมกับอ่านรายละเอียดค่ะ

03-mystou-com-android-intent

ในส่วนของไฟล์ DetailActivity.java มีโค้ดดังต่อไปนี้
ตรงนี้ต้องเข้าใจก่อนค่ะว่า การเปิด Activity ของ Java นั้นเป็นแบบ Stack
หรือ กองซ้อน หมายความว่า เมื่อมีการเปิด Activity ใด ๆ ขึ้นมา
หน้าใหม่ที่ถูกเปิดขึ้นจะลอยขึ้นมาทับหน้าเดิม
โค้ดในหน้านี้จึงทำเพียงแค่ ปิดหน้าปัจจุบันลงไป
เมื่อปิดไปแล้วก็จะพบกับหน้าเดิมที่ถูกทับเอาไว้
เพราะตอนที่เราสั่งเปิดหน้าใหม่จาก MainActivity.java นั้น
เราไม่ได้สั่งให้มัน finish(); หรือปิดหน้าของตัวเองไป
หากเราใช้คำสั่ง finish();
ในหน้า DetailActivity.java ก็ต้องสร้าง instance จากคลาส Intent ใหม่
หลักการตรงนี้สำคัญนะคะ หน้าไหนให้เปิดไว้ หน้าไหนให้ปิดต้องตัดสินใจดี ๆ ค่ะ
มาดูโค้ดกันนะคะ

04-mystou-com-android-intent

สามารถดาวน์โหลดโค้ดทั้งหมดได้ที่ GitHub

ธมนวรรณ มณีจันทร์

ธมนวรรณ มณีจันทร์

|:- เราเชื่อมั่นว่าการเสียสละและการแบ่งปันจะทำให้โลกใบนี้สวยงามมากขึ้น ทุกๆ จุดเริ่มต้นของการเรียนรู้ นำไปสู่การเรียนรู้ถัดไป เว็บไซต์แห่งนี้ขอเป็นส่วนหนึ่งของการแบ่งปันความรู้ที่ไม่มีที่สิ้นสุด มาร่วมกันผลักดันโลกของเราให้หมุนไปพร้อมกับพลังแห่งความรักด้วยกันนะคะ :) >>> |:- About Me! -:|