จากที่ครั้งก่อน การส่งค่าผ่านระหว่าง Activity กับ Activity (ตอน 1) เป็นการส่งค่าจาก Activity ไปยังอีก Activity คราวนี้จะเป็นการส่งค่ากลับมาหรือส่งผลลัพธ์กลับมายัง Activity เดิมที่ทำการ request ไป หากใครไม่ได้ทำหรืออ่านจากบทความก่อนให้กลับไปอ่านก่อนแล้วทำการดาวโหลดโค้ดเพื่อความต่อเนื่อง
ตอนจากครั้งก่อนก็ให้กลับไปที่ MainActivity แล้วไปที่ Source -> Override/Implement Methods แล้วเลือกทำการ implement method ที่มีชื่อว่า onActivityResult
เมื่อเลือกทำการ implement จะเห็นว่ามีการส่ง argument มาให้หลายค่าจะประกอบด้วย requestCode คือรหัสที่ทำการ request ไปยัง Activity ที่ 2 ส่วน resultCode นั้นจะเป็นรหัสที่ Activity ที่ 2 ตอบกับมาพร้อมกับค่าที่ใส่ใน putExtra
ซึ่งใน onActivityResult นั้นผมจะทำการแสดงข้อความที่ได้รับกลับมาจาก Activity ที่ 2 โดยเขียนโค้ดดังนี้
[sourcecode language=”java”]
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case REQUEST_CODE:
if(resultCode == RESULT_CODE){
Toast.makeText(this, data.getExtras().getString(“response message”), Toast.LENGTH_LONG).show();
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
[/sourcecode]
จากนั้นกลับไปที่ ResponseActivity โดยทำการสร้างปุ่มขึ้นมา 1 ปุ่มเพื่อเวลาคลิกจะได้ส่งค่ากลับไปให้ MainActivity นั้นเอง โดยไปสร้างปุ่มที่ไฟล์ response_activity.xml
โดยสร้างปุ่มดังรูปโดยกำหนด Text เป็นคำว่าอะไรก็ได้โดยที่นี้ผมกำหนดเป็น Response จะนั้นก็ทำการ แก้ไขไฟล์ xml ของไฟล์ response_activity.xml ว่าเวลาคลิกปุ่มให้ไปเรียก method ที่ชื่อว่า responseAction โดยมีโค้ดบางส่วนดังนี้
[sourcecode language=”xml”]
[/sourcecode]
จากนั้นก็ทำการสร้าง method ที่ชื่อว่า responseAction ตามที่กำหนด Action ให้กับปุ่มก่อนหน้านี้โดยมีโค้ดดังนี้
[sourcecode language=”java”]
public void responseAction(View view)
{
Intent intent = new Intent();
intent.putExtra(“response message”, “I am fine, thank you”);
setResult(RESULT_CODE, intent);
finish();
}
[/sourcecode]
สังเกตว่าจะมีการสร้าง Intent ใหม่เวลาจะสั่งให้อีก Activity ทำงาน เมื่อจะทำการส่งค่าไปหรือกลับจะใช้คำสั่ง putExtra รอบนี้ส่งกลับโดยใช้ชื่อข้อมูลว่า response message และส่งค่าที่เป็น string กลับไปเป็นคำว่า “I am fine, thank you” จากนั้นก็ทำการใช้คำสั่ง setResult เพื่อส่งกลับไปยัง Activity เดิมนั้นเองจะสังเกตว่ามีการใช้ค่าคงที RESULT_CODE นั้นเป็นค่าสำหรับตอบกลับไปว่า result code ที่ return กลับไปนั้นคือโค้ดอะไรจากนั้นก็จบการทำงาน
หากใครสั่งเกตและย้อนกลับไปดูว่าฝ่าย MainActivity นั้นรอรับข้อมูลถูกหรือไม่จะมีการ switch case แล้วก็ if อีกชั้น 1 เพื่อกรองค่าที่ส่งกลับมาว่าเกิดจากที่ไหนส่งอะไรกลับมาจะได้แยกถูกเพื่อในกรณัมีการส่งค่าผ่าน Activity หลายกรณีนั้นเอง
จากผลลัพธ์จะเห็นว่าการส่งกลับข้อมูลสามารถทำได้ครับ