วันนี้จะมาลองเขียนโปรแกรมรับส่งค่าระหว่าง 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
ไฟล์ display_activity.xml
จากนั้นก็สร้าง 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); } }); } }
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(); } }); } }เสร็จแล้วลอง รันโปรแกรมดูครับผลที่่ได้จะเป็นด้งนี้