การรับค่า intent และการแสดงค่า ใน activity ตอนที่ 2

เขียนเมื่อ 8 ปีก่อน โดย Ninenik Narkdee
intent android android studio

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ intent android android studio

ดูแล้ว 11,102 ครั้ง




เนื้อหาต่อเนื่องจากตอนที่แล้ว
 
การเพิ่ม activity ให้ app ใน android studio ตอนที่ 1 
 

การสร้าง 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 เบื้องต้นได้แล้ว


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ