android การส่งค่าระหว่าง activity

วันนี้จะมาลองเขียนโปรแกรมรับส่งค่าระหว่าง activity แบบง่ายใน android กันครับ  ก่อนอื่นเลยต้องรู้จักกับ activity ก่อน โดย activity เนี่ยถ้าพูดให้เข้าใจง่ายๆ ในตอนนี้อาจจะคิดว่า หนึ่งหน้าจอ คือ 1 activity ก่อนก็ได้ครับ  ทีนี้เวลาเราเปิดแอพขึ้นมาหนึ่งแอพเนี่ย มันมีหลายๆ activity  โดยเมื่อเปิด activity ขึ้นมาก็คือการ push ลงไปใน stack เมื่อ activity ทำงานเสร็จแล้วก็ pop ออกจาก stack ประมาณนี้อะครับ ถ้าต้องการเข้าใจมากขึ้นแนะนำให้ไปอ่าน ที่นี่ครับ

  ทีนี้มาเข้าเรื่องของโปรเจ็คเรา โปรเจ็คนี้จะมี 2 activity โดย MainActivity  จะโชว์หน้าจอให้ผู้ใช้กรอกชื่อเข้ามา จากนั้นจะทำการส่งชื่อไป DisplayActivity เพื่อไปแสดงครับ ก่อนอื่นก็สร้างโปรเจ็คขึ้นมาใหม่ครับ

ในที่นี้ใช้ชื่อโปรเจ็คว่า SampleIntent นะครับจะเปลี่ยนไปจากนี้ก็ได้ไม่ว่ากัน ในตอนที่สร้างโปรเจ็คใหม่ผมเลือกให้สร้าง Activity มาให้เลยคือ MainActivity( ชื่ออาจแก้ไขเป็นอันอื่นก็ได้ครับ ) ก็ต้องมาสร้าง activity อีกอันขึ้นมาโดยคลิกขวาที่ src/ชื่อแพคเกจ แล้วเลือก new -> class

จากนั้นก็สร้าง layout ขึ้นมาอีกหนึ่งไฟล์ ( ไฟล์ activity_main.xml  ถูกสร้างมาพร้อมกับ MainActivity) โดยใช้ชื่อไฟล์ว่า display_activity.xml


จากนั้นก็มาแก้ไขแต่ละไฟล์เลยครับ



ไฟล์ activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
 <EditText 
     android:id="@+id/editText1"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:inputType="text"
     android:hint="Please fill you name"
     />    
  <Button 
      android:id="@+id/button1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Go!"
      />
</LinearLayout>



ไฟล์ display_activity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
    <TextView 
        android:id="@+id/textview1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="22sp"
        android:textStyle="bold"
        android:gravity="center"
        android:text="Hello XXX"
        />
    <Button 
        android:id="@+id/btnBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Back"
        />
</LinearLayout>
ไฟล์ MainActivity.java
package com.ex.sampleintent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

 public static final String YOUNAME = "youname";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText edit = (EditText) findViewById(R.id.editText1);
        Button button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new View.OnClickListener() {   
   @Override
   public void onClick(View arg0) {
    Intent intent = new Intent(MainActivity.this, DisplayActivity.class);
    intent.putExtra(YOUNAME, edit.getText().toString());
    startActivity(intent);
   }
  });
    }

}

ไฟล์ DisplayActivity.java

package com.ex.sampleintent;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class DisplayActivity extends Activity{

 @Override
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.display_activity);
  
  Intent intent = getIntent();
  String name = intent.getStringExtra(MainActivity.YOUNAME);
  TextView textview = (TextView) findViewById(R.id.textview1);
  textview.setText(name);
  
  Button btnBack = (Button) findViewById(R.id.btnBack);
  btnBack.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View arg0) {
    finish();
    
   }
  });
  
 }
}
เสร็จแล้วลอง รันโปรแกรมดูครับผลที่่ได้จะเป็นด้งนี้

หน้าแรกจะเป็น หน้าจอให้เรากรอกชื่อ  เมื่อกรอกเสร็จแล้วคลิกปุ่ม Go ก็จะไปแสดงผลลัพธ์ในหน้าที่ 2 เสร็จแล้วสามารถ คลิกปุ่ม Back เพื่อกลับมาหน้าเดิมได้