Archive
การส่ง parameter หรือ data ให้กับ activity [Android เก็บเอามาเล่า] ต่อ
มีเพิ่มเติมต่ออีกในเรื่องของการ ส่งผ่านข้อมูลไปยัง activity (newActivity)อื่นในขณะที่สร้าง activity นั้น ยังมีต่ออีกนิส
ก็เนื่องจากว่า ความต้องการในการใช้งาน ในลักษณะนี้นั้นมี 2 ลักษณะคือ
1 สร้าง activity ที่ 2 แล้วเปิด (Fire and forget) ในกรณีนี้พูดไปแล้วนะครับ ในบทความที่แล้ว
2 สร้าง activity ที่ 2 เปิด แล้วรอ รับค่าส่งกลับ ( First and wait fore response – Ancy callback )
ในบทความนี้เรามาต่อการใช้งานในลักษณะที่ 2
หากเราต้องการ ที่จะ ให้ activity ที่ถูกสร้างขึ้นนั้น นั้นเป็น dialog รับค่าจากผู้ใช้แล้ว ส่งคืนกลับให้กับ activity ที่สร้างมัน (currentActivity) ทำอย่างไร
เรื่องนี้ เรื่องที่ค่อนข้างใช้บ่อยและสำคัญ ครับสำหรับการพัฒนาโปรแกรม เพื่อโต้ตอบกับผู้ใช้ มาดูวิธีการเลยนะครับ
ในการสราง activity แล้วรอ ค่าส่งกลับ เราทำดังนีนะครับ (สมมุติว่า acctivity ปัจจุบันคือ currentAcivity และ activity ที่จะใช้เป็น dialog คือ newActivity)

picture from http://croute.me/352
Intent newIntent = new Intent(this.getApplicationContext(),newActivity.class); Bundle bundle = new Bundle(); bundle.putString("param1","test"); newIntent.putExras(bundle); setartActivityForResult(newIntent,REQ_CODE);
** หมายเหตุ – code ด้านบน เขียนใน event อย่างเช่น onClickListener ของ view เป็นต้น
เช่น code เต็ม
.... final static int REQ_CODE = 1; ..... btnStartAct.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Intent newIntent = new Intent(this.getApplicationContext(),newActivity.class); Bundle bundle = new Bundle(); bundle.putString("param1","test"); newIntent.putExras(bundle); setartActivityForResult(newIntent,REQ_CODE ); }); }
ครับจาก code newActivity เป็น activity ที่เราต้องการสร้าง จาก currentActivity
สำหรับด้านรับข้อมูลด้าน (newActivity)
Bundle bundle = this.getIntent().getExtras(); if(bundle != null){ String param1 = bundle.getString("param1"); }
** ระวังเรื่องการส่งค่านะครับ ในกรณีนี้หากไม่กำหนดค่าให้ param1 ค่าจะเป็น null

picture from http://croute.me/352
ต่อ นะครับ สำหรับการส่งค่ากลับ ให้กลับ currentAcitivity พร้อมกลับ ส่งการ focus ให้กับ currentActivity ดังนี้
btnOk.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Bundle bundle = new Bundle(); bundle.putString(“status”, “OK”); Intent mIntent = new Intent(); mIntent.putExtras(bundle); setResult(RESULT_OK, mIntent); finish(); }); }
จะเห็นว่าการส่งค่ากลับนั้น ก็ส่งผ่าน Intent โดยใช้ putExtra method แล้วสั่ง finish เลย เป็นการเป็นหน้า activity ไปด้วยเลย สุดท้าย ในด้าน currentActivity ให้เขียน overried method ที่ชื่อว่า onActivityResult method จะถูกเรียกทันทีหลังจาก newActivity ปิดลงและส่งค่ากลับ ตัวอย่าง code ดังนี้ครับ

picture from http://croute.me/352
@Override protected void onActivityResult(int requestCode,int resultCode,String strdata,Bundle bundle) { Log.i(Global.TAG, "MainDriver main-activity got result from sub-activity"); if(resultCode == RESULT_OK) { // do something here .... // รับข้อมูลจาก bundle เหมือนปกติครับ } }
ครับ เป็นอันจบขั้นตอนการ ทำงานทั้งหมดแล้ว หวังว่า จะเป็นประโยชน์ต่อ หลายท่านที่กำลังค้นหาข้อมูลส่วนนี้อยู่นะครับ s_teerapong2000@yahoo.com
การส่ง parameter หรือ data ให้กับ activity [Android เก็บเอามาเล่า]
ในบางครั้งในการส้ราง activity นั้นเราอาจจะต้องการส่งผ่านข้อมูล ให้กับ activity เพื่อควบคุมอะไรบางอย่าง หรือ ให้ activity เอาไปประมวลผล อะไรก็ตาม ลองมาดูกันนะครับว่า มีวิธีการอย่างไร
สมมติว่า activity ปัจจุบัน ให้ชื่อว่า currentActivity และต้องการสร้าง activity ใหม่ (ให้ชื่อว่า newActivity ) พร้อมกับส่งผ่าน parameters ไปให้กับ newActivity
Intent I = new Intent(getApplicationContext(),newActivity.class); i.putExtra(“keyName”,”value”); startActivity(i);
จาก code นะครับการส่งผ่าน ทำได้โดยการ ใช้ method putExtra ของ intent เพื่อส่งผ่าน ค่า โดยให้ “keyName” เป็น ชื่อหรือตัวแปรที่ต้องการ และ “value” เป็นค่าที่ต้องการส่งนะครับ
ส่วนทาง newActivity ที่ต้องการรับ ค่าที่ส่งมาให้ทำดังนี้ครับ
Bundle extras = getIntent().getExtras(); If(extras != null){ String value = extras.getString(“keyName”); }
เป็นอันว่า เรียบร้อยครับการส่งผ่านข้อมูลไปยัง activity ที่ต้องการในขณะที่สร้าง acivitiy นั้น
สำหรับเรื่องนี้ มีต่อนะครับ …