การส่งค่าผ่านระหว่าง Activity กับ Activity (ตอน 1)

ในการเขียนโปรแกรมบน android นั้นบ้างครั้งเราก็จำเป็นต้องส่งค่าไปมาระหว่าง Activity หรือที่เรียกว่าหน้าจอนั้นแหละซึ่งวันนี้เลยเอามาเขียนเป็นบทความเพื่อใครกำลังหาวิธีอยู่ โดยจะแบ่งออกเป็น 2ตอน ตอนแรกนี้จะเป็นการส่งค่าจาก Activity หลักไปยังอีก Activity โดยจะทำการ start Activity พร้อมส่งข้อความ String ไป เมื่อ Activity หลักนั้นทำการกดปุ่ม

โดยเริ่มแรกผมก็ทำการสร้าง Project ใหม่ขึ้นมาโดยมีรายละเอียดตามภาพ

android สร้างโปรเจ็ค

ทำการสร้าง Project ใหม่รองรับ 2.2 -4.0

เลือกเป็น Blank Activity เพื่อความสะดวกและรวดเร็ว

เขียน android

ทำการตั้งชื่อ activity หลัก

android สร้าง layout activity

จากนั้นให้ไปที่ res ของ Project แล้วไปที่ layout แล้วทำการ new android xml file ตามรูป

android new layout

จากนั้นตั้งชื่อไฟล์พร้อมเลือก layout ที่ต้องการโดยผมเลือกเป็น RelativeLayout

 

android สร้างปุ่ม

จากนั้นกลับมาแก้ไฟล์ layout ของ Activity หลักคือ activity_main.xml โดยทำการสร้างปุ่มขึ้นมา 1 ปุ่มโดยเปลี่ยน Text ให้เป็นคำว่า Request

สร้าง class

ต่อจากนั้นทำการสร้าง class สำหรับ Activity อีกอัน โดยให้เลือก สืบทอดมาจาก Activity

เมื่อสร้างเสร็จให้ทำการ Implement Method onCreate โดยไปที่ Source – > แล้วเลือกตามรูป

implement onCreate

เมื่อทำตามรูปเสร็จแล้วต่อไปก็จะเป็นการเขียน 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 ตอบกลับนั้นขอเป็นตอนหน้านะครับ

Download SourceCode

Leave a Reply

Your email address will not be published. Required fields are marked *