เนื้อหาต่อเนื่องจากตอนที่แล้ว
การเพิ่ม activity ให้ app ใน android studio ตอนที่ 1
https://www.ninenik.com/content.php?arti_id=616 via @ninenik
การสร้าง intent
Intent เป็น object ที่ใช้สำหรับทำงานเชื่อมกันระหว่าง component ต่างๆ อย่างเช่น ใช้สำหรับทำงานร่วมกัน
ระหว่าง 2 activity กล่าวคือ Intent เป็นการบอกว่า app นั้นมีเป้าหมายหรือตัดสินใจที่จะทำบางสิ่งบางอย่าง
เราสามารถใช้ intent ในรูปแบบต่างๆ มากมาย แต่ในเนื้อหาต่อไปนี้ เราจะใช้ intent สำหรับเรียกใช้งาน activity
อื่นขึ้นมาแสดง
ใน MainActivity ให้เราเพิ่ม EXTRA_MESSAGE constant ตัวแปรค่าคงที่ รวมถึงโค้ดเพิ่มเติมในส่วนของ sendMessage()
เข้าไปตามตัวอย่างด้านล่าง
public class MainActivity extends AppCompatActivity { public static final String EXTRA_MESSAGE = "com.example.ninenik.study001.MESSAGE"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /** ทำงานเมื่อผู้ใช้กดที่ปุ่ม Send button */ public void sendMessage(View view) { Intent intent = new Intent(this, DisplayMessageActivity.class); EditText editText = (EditText) findViewById(R.id.editText); String message = editText.getText().toString(); intent.putExtra(EXTRA_MESSAGE, message); startActivity(intent); } }
Android studio จะขึ้นแจ้ง error อีกครั้ง เนื่องจากเรามีการเรียกใช้งาน class ต่างๆ ที่ยังไม่ได้ import เข้ามา ให้เราทำ
เหมือนเดิม คือเลือนเมาส์ไปยังตัวที่ error แล้วกดแป้น Alt+Enter แล้วเลือก import class ต่างๆ เข้ามา เราจะได้ส่วนของ
การ import สุดท้าย เป็นดังนี้
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText;
อย่างไรก็ตาม ยังเหลือส่วนที่ error อยู่สำหรับ DisplayMessageActivity เพราะเรายังไม่ได้สร้าง activity ใหม่นี้เข้ามา
เราจำทำในลำดับต่อไป
อธิบายเพิ่มเติมในส่วนของ sendMessage()
- ในส่วนของ Intent มีการใช้งาน parameter 2 ตัว ดังนี้
1. ส่วนของ Context เป็น parameter แรก แทนด้วย activity ที่่เราใช้งานอยู่ ในที่นี้ใช้ this แทน
เพราะ activity class เป็น subclass ของ Context
2. class ที่ ระบบจะทำการส่ง Intent ในที่นี้คือ class ที่จะถูกเรียกขึ้นมาใช้งาน คือ DisplayMessageActivity
ที่เราจะสร้างเพิ่มเข้ามา
- คำสั่ง putExtra() เป็น method เพื่อนำค่าจาก EditText เพิ่มเข้าไปใน Intent โดย Intent object จะเก็บข้อมูล
ในรูปแบบ key-value ส่งค่าจับคู่กัน เรียกสิ่งนี้ว่า extra สำหรับ key ที่เรากำหนดนี้เป็นตัวแปรคงที่แบบ public คือ
ชื่อว่า EXTRA_MESSAGE เนื่องจาก activity ที่เราจะสร้างเพิ่ม ใช้ key นี้เพิ่มรับค่าข้อความ ในตัวอย่างเรากำหนดค่า
key โดยใช้ เป็น package name นำหน้า เพื่อให้มั่นใจว่าค่าที่ได้จะไม่ซ้ำกัน
- คำสั่ง startActivity() เป็น method ที่ใช้เรียกใช้ DisplayMessageActivity ผ่าน Intent object
ต่อไปเราไปในส่วนของการสร้าง DisplayMessageActivity class
การเพิ่ม Activity
1. ในหน้าต่าง Project คลิกขวาที่ app โฟลเดอร์แล้ว เลือก New > Activity > Empty Activity
2. ในส่วนของหน้าต่าง Configure Activity ให้กรอก "DisplayMessageActivity" สำหรับ Activity Name แล้วคลิก Finish
Android studio จะทำการสร้าง 3 สิ่งต่อไปนี้ให้อัตโนมัติ
- สร้างไฟล์ DisplayMessageActivity
- สร้าง ส่วนของ layout ไฟล์ ด้วยชื่อที่สัมพันธ์กัน activity_display_message.xml
- เพิ่ม <activity> element ที่จำเป็นในการใช้งานเข้าไปในไฟล์ AndroidManifest.xml
ในตอนนี้ ถ้าเราทดสอบ run app เมื่อ app เปิดขึ้นมาแล้วเรากดที่ปุ่ม button จะเป็นการไปเปิดหน้า activity ที่สองที่เราสร้าง ขึ้นมาแสดง
แต่ยังเป็นหน้าว่างเปล่า เพราะเรายังไม่ได้กำหนดอะไรเข้าไป
การเพิ่ม text view
ใน activity ใหม่ที่เราสร้างขึ้นมา ตอนนี้ยังเป็น layout แบบโล่งว่าง ดังนั้น เราจะทำการเพิ่ม text view เข้าไป เพื่อใช้สำหรับแสดงข้อความ
1. เปิดไฟล์ app > res > layout > activity_display_message.xml
2. คลิกเปิด Turn On Autoconnect ในแถบเครื่องมือ
3. ในหน้าต่างถาดอุปกรณ์ คลิกที่ Text แล้วเลือก TextView ลากมาวางใน layout ใกล้ๆ ตรงกลางส่วนด้านบนของ layout
โดยจะถูกตรึงติดกับเส้นแนวตั้งที่แสดง ตัว autoconnect จะทำการจัดตำแหน่งด้านซ้ายและขวาให้และจัด view ให้อยู่ตรงกลางในแนวนอน
4. กำหนดขอบเขตจากขอบด้านบนของ layout กับขอบด้านบนของ text view จะได้ผลลัพธ์ตามรูปภาพประกอบ
นอกจากนั้น เราอาจจะกำหนดรูปแบบของข้อความเพิ่มเติมได้ด้วย โดยการกำหนด textApperance ในส่วนจัดการ Attributes แล้วแก้ไขค่า
attribute อย่าง textSize และ textColor ได้ตามต้องการ
การแสดงข้อความทาง text view
ต่อไปเราจะทำการแก้ไขส่วนของ activity ที่สองที่เราสร้างมาในตอนต้น เพื่อที่จะให้แสดงข้อความ ที่ส่งมาจาก activity แรก
1. ใน DisplayMessageActivity เพิ่มโค้ดต่อไปนี้เข้าไปในส่วนของคำสั่ง onCreate()
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_message); // รับค่า intent เริ่มเรียกใช้ activity นี้ และดึงค่าจาก ตัวแปร string Intent intent = getIntent(); String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); // กำหนด textview ที่จะนำค่ามาแสดง TextView textView = findViewById(R.id.textView); textView.setText(message); }
2. จัดการ import class ต่างๆเข้ามาให้ครบ เพื่อไม่ให้โค้ดเกิด error สุดท้ายเราจะได้ในส่วนของการ import ตามโค้ดด้านล่าง
import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView;
เพิ่มการควบคุมทิศทางการทำงาน
ในแต่ละหน้าจอที่ไม่ใช่หน้าหลักภายใน app จำเป็นต้องมีการกำหนดการควบคุมทิศทาง เพื่อที่จะให้ผู้ใช้สามารถจะย้อนกลับมายัง
หน้าหลักได้ เช่น การกดที่ปุ่มย้อนกลับในแถบเมนู
สิ่งที่เราจำเป็นต้องทำต่อไปคือ กำหนดว่า activity ไหนสมควรหรือเหมาะสมที่จะเป็น activity หลักลงในไฟล์ AndroidManifest.xml
ดังนั้น ให้เราเปิดไฟล์ app > manifests > AndroidManifest.xml จากนั้นดูในส่วนของ <activity> tag จากนั้นแทนโค้ดด้านล่าง
เข้าไปในส่วนของ DisplayMessageActivity
<activity android:name=".DisplayMessageActivity" android:parentActivityName=".MainActivity"> <!-- The meta-data tag is required if you support API level 15 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity>
จะได้เป็น
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.ninenik.study001"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".DisplayMessageActivity" android:parentActivityName=".MainActivity"> <!-- The meta-data tag is required if you support API level 15 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> </application> </manifest>
ระบบ android จะทำการเพิ่มปุ่มย้อนกลับเข้าไปในแถบเมนู ของ app ใฟ้อัตโนมัติ
ทดสอบ run app
เมื่อเราเปิด app ขึ้นมาอีกครั้ง โดยการกดที่ปุ่ม Apply Changes ในแถบเครื่องมือ เมื่อ app เปิดขึ้นมาแล้วเราทำการกรอกข้อความใดๆ
ลองใน text field แล้วกดปุ่ม Send เราก็จะเห็นข้อความ ถูกส่งไปแสดงใน activity ที่สอง พร้อมกับด้านบนก็จะแสดงปุ่มย้อนกลับให้
ตามตัวอย่างด้านล่าง
ตอนนี้เราได้สร้าง app android เบื้องต้นได้แล้ว