ในการเขียนโปรแกรมบน android นั้นบ้างครั้งเราก็จำเป็นต้องส่งค่าไปมาระหว่าง Activity หรือที่เรียกว่าหน้าจอนั้นแหละซึ่งวันนี้เลยเอามาเขียนเป็นบทความเพื่อใครกำลังหาวิธีอยู่ โดยจะแบ่งออกเป็น 2ตอน ตอนแรกนี้จะเป็นการส่งค่าจาก Activity หลักไปยังอีก Activity โดยจะทำการ start Activity พร้อมส่งข้อความ String ไป เมื่อ Activity หลักนั้นทำการกดปุ่ม
โดยเริ่มแรกผมก็ทำการสร้าง Project ใหม่ขึ้นมาโดยมีรายละเอียดตามภาพ
ทำการสร้าง Project ใหม่รองรับ 2.2 -4.0
เลือกเป็น Blank Activity เพื่อความสะดวกและรวดเร็ว
ทำการตั้งชื่อ activity หลัก
จากนั้นให้ไปที่ res ของ Project แล้วไปที่ layout แล้วทำการ new android xml file ตามรูป
จากนั้นตั้งชื่อไฟล์พร้อมเลือก layout ที่ต้องการโดยผมเลือกเป็น RelativeLayout
จากนั้นกลับมาแก้ไฟล์ layout ของ Activity หลักคือ activity_main.xml โดยทำการสร้างปุ่มขึ้นมา 1 ปุ่มโดยเปลี่ยน Text ให้เป็นคำว่า Request
ต่อจากนั้นทำการสร้าง class สำหรับ Activity อีกอัน โดยให้เลือก สืบทอดมาจาก Activity
เมื่อสร้างเสร็จให้ทำการ Implement Method onCreate โดยไปที่ Source – > แล้วเลือกตามรูป
เมื่อทำตามรูปเสร็จแล้วต่อไปก็จะเป็นการเขียน Event เพื่อส่งค่าไปยัง ResponseActivity ครับ โดยให้ไปที่ MainActivity ทำการเขียน method ดังนี้
[sourcecode language=”java”]
private static final int REQUEST_CODE = 100;
 
public void sendRequest(View view)
{
Intent intent = new Intent(this, ResponseActivity.class);
intent.putExtra(“Request Message”, “Hello”);
startActivityForResult(intent,REQUEST_CODE);
}
[/sourcecode]
จะเห็นว่ามีการสร้าง Intent ขึ้นมาใหม่พร้อมทั้งระบุว่าให้ ResponseActivity เป็น Activity ที่ต้องการจากนั้นมีการใช้คำสั่ง .putExtra ซึ่งมันต้องการ param 2 ตัวคือชื่อของ message หรือค่าที่ส่งไป อีกตัวจะเป็นค่าที่ส่งไปจะเป็นข้อความหรือตัวเลขก็ได้ จากนั้นทำการรัน ResponseActivity โดยใช้คำสั่ง startActivityForResult เพื่อรอรับผลส่งค่ากลับจาก ResponseActivity ซึ่งจะต่อในครั้งน่า ส่วนอีกค่าที่ส่งไปใน method นี้คือ Request code ที่กำหนดขึ้นเพื่อที่จะเป็นตัวระบุค่าหรือเหตุการณ์ที่ต้องการในการทำงานของโปรแกรม
เมื่อทำเสร็จแล้วให้ไปที่ activity_main.xml จากนั้นเพื่อ tag onClick เพื่อกำหนดว่าเมื่อมีการ click จะเป็นเรียกใช้ method sendRequest ซึ่ง param ของ sendRequest นั้นมันบังคับว่าต่องมี View หลังจากทำในส่วนของ MainActivity ไปแล้วต่อไปก็ฝ่าย ResponseActivity โดยใน ในไฟล์ response_activity.xml นั้นให้ทำการสร้าง TextView ขึ้นเป็นแบบ Large แต่ไม่ต้องกำหนด Text เพื่อที่จะเอามาแสดงข้อความ Request
[sourcecode language=”xml”]
[/sourcecode]
ต่อจากนั้นมาทำการเขียนโค้ดเพิ่มใน ResponseActivity.java
[sourcecode language=”java”]
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.response_activity);
TextView txtRequest = (TextView)findViewById(R.id.txtRequest);
Intent intent = getIntent();
if(intent != null && intent.getExtras() != null){
String request = intent.getExtras().getString(“Request Message”);
txtRequest.setText(request);
}
}
[/sourcecode]
โดยมีการกำหนด layout ให้กับ Activity นี้โดยใช้คำสั่ง setContentView ต่อจากนั้นก็สร้างตัวแปร TextView เพื่อจะใช้ควบคุม TextView ที่สร้างไปก่อนหน้า จากนั้นก็สร้าง Intent จาก Intent ที่ส่งมาจาก Activity ก่อน ต่อจากนั้นก็มีการ check เงื่อนไขเล็กน้อยเพื่อความแน่ใจในการส่งข้อมูลและไม่ทำให้โปรแกรมทำงานผิดพลาด จากนั้นก็มีการดึงค่าจาก key ที่ชื่อว่า “Request Message” ที่ส่งมาจาก MainActivity จากนั้นก็เอาไปแสดงใน txtRequest ก็เป็นอันเสร็จสิ้น
ผลลัพธ์ก๋ได้ประมาณนี้ครับ
สรุป
การส่งค่าข้อมูลไปอีก Acitivity ต้องใช้ putExtra ซึ่งส่งค่าไป 2 ตัวคือชื่อ tag และค่าที่ต้องการส่งสามารถส่งได้หลายขนิดข้อมูล หลังจากนั้นก็ใช้ method startActivityForResult ส่ง Intent ไป พร้อม request code เพื่อที่ฝ่ายรับจะไปแยกว่าได้รับ request code อะไรมา
ส่วนฝั่ง Acitivity รับก็จะใช้ Intent intent = getIntent(); และ intent.getExtras().getString(“Request Message”); ถ้ามีการส่งค่า int ก็มี getInt นะครับส่วนฝ่าย ResponseActivity ตอบกลับนั้นขอเป็นตอนหน้านะครับ