การสร้าง ActiveList แล้วเรียกใช้งาน class อื่น
การสร้าง ActiveList แล้วเรียกใช้งาน class อื่น
ในการพัฒนา android app นั้นเมื่อโปรแกรมมีการทำงานที่ซับซ้อนนั้น หลักการพื้นฐานของ oop ก็น่าจะเป็นการสร้าง class เพื่อที่จะสร้าง object ที่ทำงานต่างกันไป วันนี้หลังจากหายไปนานไม่ได้เขียนบทความเลย เอาตัวอย่างการสร้าง Active List เมื่อ เลือก list แล้วก็จะไปเรียกใช้งาน class ต่างๆที่มีอยู่ครับเราไปดูกันเลย
หลังจากที่สร้างโปรเจ็คเสร็จแล้วให้เราทำการแก้ไขไฟล์หลัก ActiveList.java ให้ทำการ extends มาจาก ListActivity
เพื่อที่เราจะทำการหน้าตาแบบ list ได้ โดยมีโค้ดดังนี้
package com.thaicoding.activelist;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ActiveList extends ListActivity {
/** Called when the activity is first created. */
String menu[] = {"Helloword", "Thaicoding"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, menu));
}
}
จากนั้นลองรันดูจะได้หน้าต่างแบบนี้
ซึ่งเมนูเราสร้างมาจาก String array ที่ชื่อว่า menu นั้นเองส่วนรูปแบบ style นั้นก็จะกำหนดโดย android.R.layout.simple_list_item_1 ซึ่งลองใช้แบบต่างๆดูได้ครับ ต่อมาเราจะมาสร้าง class ตามชื่อเมนูครับมีคลาสชื่อว่า? Helloword, Thaicoding
โดยทั้ง 2 คลาสไม่มีอะไรมาให้มัน extends มาจาก? Activity โดยไม่มีการทำงานอะไรมากเพิ่งแค่สร้าง TextView จากนั้นก็จะแสดงผลออกทางหน้าจอซึ่งต่างกันเฉพาะคำเท่านั้น
โค้ดทั้ง 2 คลาส
package com.thaicoding.activelist;
import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
public class Thaicoding extends Activity {
TextView textView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = new TextView(this);
textView.setText("Thaicoding.net");
setContentView(textView);
}
}
package com.thaicoding.activelist;
import android.app.Activity;
import android.widget.TextView;
import android.os.Bundle;
public class Helloword extends Activity {
TextView textView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
textView = new TextView(this);
textView.setText("HelloWord");
setContentView(textView);
}
}
เมื่อสร้างคลาสทั้ง 2 แล้วเราก็มากำหนด action ให้กับคลาสหลักให้ทำการเพิ่ม onListItemClick โดยมีโค้ดทั้งหมดดังนี้
package com.thaicoding.activelist;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ActiveList extends ListActivity {
/** Called when the activity is first created. */
String menu[] = {"Helloword", "Thaicoding"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, menu));
}
@Override
protected void onListItemClick(ListView list, View view, int position,long id)
{
super.onListItemClick(list, view, position, id);
String testName = menu[position];
try {
Class clazz = Class
.forName("com.thaicoding.activelist." + testName);
Log.d(testName, testName);
Intent intent = new Intent(this, clazz);
startActivity(intent);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
หลักจากที่เราเขียนโค้ดเสร็จแล้วก็กำหนดสิทธิการรันของ class ในไฟล์ AndroidManifest.xml โดยเพิ่ม tag ใหม่จะได้ดังนี้
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.thaicoding.activelist"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ActiveList"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:label="Helloword Test"
android:name=".Helloword"
android:configChanges="keyboard|keyboardHidden|orientation" />
<activity android:label="Thaicoding Test"
android:name=".Thaicoding"
android:configChanges="keyboard|keyboardHidden|orientation" />
</application>
</manifest>
เมื่อเสร็จแล้วลองรันแล้วเลือกดูครับมันก็จะได้หน้าตาประมาณนี้ครับ
หลักการสำคัญให้สังเกต onListItemClick ให้ดีครับจะมีการใช้งาน
Class clazz = Class.forName(“com.thaicoding.activelist.” + testName);
ซึ่ง testName นั้นจะเป็นชื่อ class ที่อยู่ในตัวแปรเมนูนั้นเอง ซึ่งในการใช้งานแบบนี้เราต้องดูเรื่องของ package ของภาษาจาวาให้ดีนะครับ หวังว่าจากตัวอย่างนี้จะทำให้หลายคนเอาไปประยุกต์ใช้งานได้นะครับ





