[Android Dev] รับส่งข้อมูลระหว่าง Activity ด้วย Intent
Blog นี้เป็น Blog ที่เขียนต่อจาก Sample Intent นะครับ
ซึ่งเป็นการเปลี่ยนหน้าไปมา หรือที่เรียกว่า Activity ล่ะครับ
ซึ่งสามารถศึกษาได้ที่นี่นะครับ
Android Dev :: ทำ Apps หลายๆ หน้าด้วย Intent
เมื่อคราวที่แล้ว เป็นแค่โปรแกรมง่ายๆ ครับ คือ คลิกปุ่มที่ Activity A ก็เปลี่ยนไป Activity B
แต่วันนี้เราจะส่งข้อมูลระหว่าง Activity ด้วย
การทำงานของโปรแกรมที่ผมจะเขียนนั้นจะทำงานโดย
- คลิกปุ่มที่ Activity A จะเปลี่ยนไป Activity B
- คลิกปุ่มที่ Activity B จะเปลี่ยนกลับมาที่ Activity A โดยส่ง String คำว่า "Hello World !!" ด้วย
- Activity A รอรับค่าจาก Activity B เมื่อมีการส่งมา ให้นำ String มาแสงบน TextView
ส่วนของ UI จะเหมือนกับ Tutorial ที่แล้วเลยนะครับ
เราจะลงในส่วนของ Coding อย่างเดียว ^___^
เริ่มจากโค้ดที่ Activity B [SecondView.java]
ก่อนนะครับ [เพราะมันสั้นกว่า :P]
โค้ดในส่วนแรกจะไม่มีอะไรมากนะครับ
ที่เพิ่มมาก็คือ ประกาศ String ที่เราจะส่งกลับไปเท่านั้น (ค่าที่ส่งจะเป็นอะไรก็ได้นะครับ)
จะมาต่างในส่วนนี้ครับ เมื่อคราวที่แล้วผมใช้แค่ finish(); เพื่อที่จะกลับไป Activity A
แต่คราวที่นี้ผมเพิ่ม 2 บรรทัดครับ คือ
putExtra(name[String],value[anyType]);
เป็น Method ที่จะส่งอะไรสักอย่างไปให้ Intent เพื่อทำงานต่อ
setResult(resultCode, intent);
เป็น Method ที่จะทำการระบุว่า มี Result ส่งกลับไปด้วย Intent ใดๆ พร้อมรหัสยืนยันว่าส่งสำเร็จด้วย
**รหัสยืนยันในที่นี้ จะเหมือนกับสถานะครับ
ถ้าสำเร็จจะใช้ RESULT_OK ไม่สำเร็จจะใช้ RESULT_CANCELED [ถูก define ไว้อยู่แล้ว]
ต่อไปในส่วนของ Activity A [SampleIntent.java] นะครับ
ในส่วนนี้เราจะเพิ่ม TextView ที่จะใช้แสดง Message ที่ได้รับกลับมาจาก Activity B
และ REQUEST_CODE ใช้ในกรณีที่เราส่งหลายๆ ค่ากลับมา เป็นตัวจำแนกสิ่งที่ส่งกลับมา
ส่วนนี้ก็เขียนคล้ายเดิมครับ เพิ่มแค่การอ้างอิง TextView ใน main.xml เท่านั้น
เจอที่ต่างแล้ว จากที่เราใช้ startActivity(); เฉยๆ
คราวนี้เราใช้ startActivityForResult(intent, requestCode); เพื่อรออะไรบางอย่างจาก Activity B ด้วย
ซึ่ง method นี้จะใช้คู่กับ method onActivityResult() เพื่อกระทำการกับค่าที่ได้รับกลับมาครับ
ให้เรา Override method นี้ซะ [วิธีการคือพิมพ์ onAc แล้วรอ AutoComplete จัดการ [Eclipse]]
ใน method นี้ก็ทำการ check requestCode ที่ส่งกลับมาก่อนว่าตัวไหน (เผื่อมีการส่งผ่านหลายค่า)
แล้วจากนั้นก็เช็คว่า resultCode ที่กลับมา โอเคไหม ถ้าตรงกัน
เราก็จะกระทำการกับสิ่งที่ส่งมา
method getExtra(name); เนี่ยจะเป็นการรับค่าที่ได้จาก Intent ที่ส่งมา
ซึ่งลักษณะของชื่อ method จะเป็น
[intent].get[type]Extra([name]);
intent คือ ตัวแปร intent ที่อยู่ใน onActivityResult ในที่นี้ก็คือ data นั่นเอง
type คือ ชนิดตัวแปรที่ส่งมา เป็นอะไรก็ได้ทั้ง String, Float, Integer
name คือ ชื่อตัวแปรที่เราผ่านมาซึ่งต้องตรงกับ argument แรก ของ putExtra() ใน Activity B
ในที่นี้คือ รับค่าที่เป็น String จาก Intent ด้วย getStringExtra(name) และจัดการ setText ด้วย String ที่ส่งมา
แค่นี้แหละครับ คงไม่ยากเกินไปนะครับ
ซึ่งเป็นการเปลี่ยนหน้าไปมา หรือที่เรียกว่า Activity ล่ะครับ
ซึ่งสามารถศึกษาได้ที่นี่นะครับ
Android Dev :: ทำ Apps หลายๆ หน้าด้วย Intent
เมื่อคราวที่แล้ว เป็นแค่โปรแกรมง่ายๆ ครับ คือ คลิกปุ่มที่ Activity A ก็เปลี่ยนไป Activity B
แต่วันนี้เราจะส่งข้อมูลระหว่าง Activity ด้วย
การทำงานของโปรแกรมที่ผมจะเขียนนั้นจะทำงานโดย
- คลิกปุ่มที่ Activity A จะเปลี่ยนไป Activity B
- คลิกปุ่มที่ Activity B จะเปลี่ยนกลับมาที่ Activity A โดยส่ง String คำว่า "Hello World !!" ด้วย
- Activity A รอรับค่าจาก Activity B เมื่อมีการส่งมา ให้นำ String มาแสงบน TextView
ส่วนของ UI จะเหมือนกับ Tutorial ที่แล้วเลยนะครับ
เราจะลงในส่วนของ Coding อย่างเดียว ^___^
เริ่มจากโค้ดที่ Activity B [SecondView.java]
ก่อนนะครับ [เพราะมันสั้นกว่า :P]
โค้ดในส่วนแรกจะไม่มีอะไรมากนะครับ
ที่เพิ่มมาก็คือ ประกาศ String ที่เราจะส่งกลับไปเท่านั้น (ค่าที่ส่งจะเป็นอะไรก็ได้นะครับ)
จะมาต่างในส่วนนี้ครับ เมื่อคราวที่แล้วผมใช้แค่ finish(); เพื่อที่จะกลับไป Activity A
แต่คราวที่นี้ผมเพิ่ม 2 บรรทัดครับ คือ
putExtra(name[String],value[anyType]);
เป็น Method ที่จะส่งอะไรสักอย่างไปให้ Intent เพื่อทำงานต่อ
![]() |
อย่างที่บอกว่า เราจะ put ค่าอะไรก็ได้ ใช้ method เดียวกันแหละครับ |
เป็น Method ที่จะทำการระบุว่า มี Result ส่งกลับไปด้วย Intent ใดๆ พร้อมรหัสยืนยันว่าส่งสำเร็จด้วย
**รหัสยืนยันในที่นี้ จะเหมือนกับสถานะครับ
ถ้าสำเร็จจะใช้ RESULT_OK ไม่สำเร็จจะใช้ RESULT_CANCELED [ถูก define ไว้อยู่แล้ว]
ต่อไปในส่วนของ Activity A [SampleIntent.java] นะครับ
ในส่วนนี้เราจะเพิ่ม TextView ที่จะใช้แสดง Message ที่ได้รับกลับมาจาก Activity B
และ REQUEST_CODE ใช้ในกรณีที่เราส่งหลายๆ ค่ากลับมา เป็นตัวจำแนกสิ่งที่ส่งกลับมา
ส่วนนี้ก็เขียนคล้ายเดิมครับ เพิ่มแค่การอ้างอิง TextView ใน main.xml เท่านั้น
เจอที่ต่างแล้ว จากที่เราใช้ startActivity(); เฉยๆ
คราวนี้เราใช้ startActivityForResult(intent, requestCode); เพื่อรออะไรบางอย่างจาก Activity B ด้วย
ซึ่ง method นี้จะใช้คู่กับ method onActivityResult() เพื่อกระทำการกับค่าที่ได้รับกลับมาครับ
ให้เรา Override method นี้ซะ [วิธีการคือพิมพ์ onAc แล้วรอ AutoComplete จัดการ [Eclipse]]
ใน method นี้ก็ทำการ check requestCode ที่ส่งกลับมาก่อนว่าตัวไหน (เผื่อมีการส่งผ่านหลายค่า)
แล้วจากนั้นก็เช็คว่า resultCode ที่กลับมา โอเคไหม ถ้าตรงกัน
เราก็จะกระทำการกับสิ่งที่ส่งมา
method getExtra(name); เนี่ยจะเป็นการรับค่าที่ได้จาก Intent ที่ส่งมา
ซึ่งลักษณะของชื่อ method จะเป็น
[intent].get[type]Extra([name]);
intent คือ ตัวแปร intent ที่อยู่ใน onActivityResult ในที่นี้ก็คือ data นั่นเอง
type คือ ชนิดตัวแปรที่ส่งมา เป็นอะไรก็ได้ทั้ง String, Float, Integer
name คือ ชื่อตัวแปรที่เราผ่านมาซึ่งต้องตรงกับ argument แรก ของ putExtra() ใน Activity B
ในที่นี้คือ รับค่าที่เป็น String จาก Intent ด้วย getStringExtra(name) และจัดการ setText ด้วย String ที่ส่งมา
แค่นี้แหละครับ คงไม่ยากเกินไปนะครับ
Comments
Post a Comment