การเปลี่ยนฉากหรือ intent ใน android
หายไปนานกลับการเขียนบทความ จนเรียกว่าแทบจะไม่มีใครเข้าเว็บอยู่แล้วเพราะไม่มีอะไรใหม่ๆเลย ก็มันไม่ว่างจริงๆเลยไม่ได้เขียน การเขียนบทความที่เป็นแนว tutorial นั้นมันต้องใช้เวลาในการเขียนแต่ละบทความต้องศึกษาแล้วก็ทดลองก่อนว่ามันได้ตามนั้นหรือไม่ เอาละมาครั้งนี้ก็เขียนบทความ android กันต่อเหตุที่ผลเลือกเขียนบทความ android เพราะตอนนี้มันกำลังเป็นที่นิยม เลยขอเป็นพลังเล็กน้อยที่ทำให้เยาวชน มีแหล่งความรู้ในการพัฒนา software
บทความนี้จะเป็นการเปลี่ยนฉากในโปรแกรมหรือที่เรียกว่า intent ใน การเขียนโปรแกรม android นั้นเอง
ขั้นแรกก็สร้าง project ใหม่ขึ้นมา โดยผมจะตั้งชื่อว่า THCIntent ตามรูปครับ
เมื่อสร้าง project เสร็จแล้วให้ทำการสร้าง string และสร้าง button รวมไปถึงการสร้างหน้าที่จะสลับระหว่างหน้าหลักโดยให้ทำการสร้าง string ในไฟล์ string.xml โดยเพิ่มอีก 2 string คือ
[sourcecode language=”java”]
[/sourcecode]
เมื่อสร้าง string เสร็จแล้วให้ทำการเพิ่มปุ่มในไฟล์ xml ที่กำหนดหน้าหลักในไฟล์ main.xml ดังนี้
[sourcecode language=”xml”]
[/sourcecode]
ต่อจากนั้นก็สร้างไฟล์ใหม่เพื่อหน้าที่จะสลับ โดยผมจะตั้งชื่อว่า swapintent.xml โดยจะอยู่ใน directory layout โดยถ้าให้ง่ายก็ก็อปโค้ดจาก main.xml ไปแล้วก็เปลี่ยนค่าของ button มาส่วน
[sourcecode language=”xml”]
[/xml]
แล้วก็ในส่วนของ background color ด้วยครับ
android:background=?@color/red?
เพื่อให้สังเกตการณ์เปลี่ยนฉากหรือ intent นั้นผมจะกำหนดสีให้แต่ละหน้าเพื่อที่จะได้เห็นผลชัดเจนโดยที่จะไปสร้างไฟล์เพื่อเก็บค่าสีใน value ไฟล์ชื่อว่า colors.xml โดยเพิ่มโค้ดดังนี้
[sourcecode language=”xml”]
[/sourcecode]
ต่อมาก็เขียนโค้ดจาวาในไฟล์โค้ดหน้าหลักและหน้ารองโดยในหน้าหลักหรือว่า class หลักก็มีโค้ดต่อไปนี้
[sourcecode language=”java”]
package org.thaicoding.thcintent;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.content.Intent;
public class THCIntent extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button swapButton = (Button)findViewById(R.id.mainbutton);
swapButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(THCIntent.this,SwapIntent.class);
startActivity(intent);
}
});
}
}
[/sourcecode]
ส่วน class ที่ทำหน้าที่ในหน้ารองคือ SwapIntent.java มีโค้ดดังนี้
[sourcecode language=”java”]
package org.thaicoding.thcintent;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class SwapIntent extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.swapintent);
Button mainButton = (Button)findViewById(R.id.swapbutton);
mainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
finish();
}
});
}
}
[/sourcecode]
หลักจากเขียนโค้ดเสร็จแล้วเราก็มากำหนด Activity ที่อนุญาตให้ทำงานในไฟล์ AndroidManifest.xml โดยให้เพิ่ม activity ที่อนุญาตขึ้นมาอีก 1 อันคือ SwapIntent นั้นเองโดยมีการเพิ่มโค้ดแล้วจะได้ดังนี้
[sourcecode language=”xml”]
[/sourcecode]
หลังจากเพิ่มโค้ดเสร็จหมดแล้วก็ลองรันโปรแกรมดูครับ
จะเห็นว่าเมื่อรันโปรแกรมเวลากดปุ่มมันจะสลับหน้าต่างกันซึ่ง จากในโค้ดหน้าต่างมันใช้คนละ class กันครับซึ่งทำให้เห็นว่าหากเรามีการให้ application เปลี่ยนหน้าต่างเมนูแล้วละก็ให้ class แต่ละอันรับผิดชอบการทำงานไปเลยทำให้ application เรามีความซับซ้อนมากขึ้นครับ สิ่งที่จะให้สังเกตก็คือ
Intent intent = new Intent(THCIntent.this,SwapIntent.class);
startActivity(intent);
คำสั่งนี้จะเป็นการเรียกใช้ intent มาใช้งานซึ่งจะมีการกำหนด intent จะมีการกำหนด component หรือ class ที่เป็นปลายทางขึ้น ซึ่งเมื่อเราใช้คำสั่ง startActivity(intent); จึงทำให้เราไปเรียกใช้งาน class SwapIntent นั้นเองโดยภายใน คลาส SwapIntent นั้นก็มีโค้ดคล้ายกับโค้ดหลักอยู่แล้วต่างกันที่ setContentView(R.layout.swapintent);
ซึ่งคำสั่ง Intent นั้นทำให้โปรแกรมไปทำงานใน class SwapIntent แทนแล้ว คลาส SwapIntent นี้ก็มีการเรียกให้เปลี่ยนหน้าเมนูอีกจึงเป็นเหตุเมื่อเราเปลี่ยน class ทำงานหน้าต่างก็เปลี่ยนไปนั้นเอง แล้วเมื่อ class SwapIntent นั้นมีการสร้างปุ่มซึ่งเมื่อคลิกมันจะใช้คำสั่ง finish ทำให้โปรแกรมกลับไปทำงานใน class เดิมที่เรียกมานั้นเอง
หากใครไม่เข้าวิธีการใส่ event ให้กับปุ่มหรืองงอะไรท่านสามารถไปดูได้ในหมวดหมู่ mobile programming ได้ครับ