การสร้าง ActiveList แล้วเรียกใช้งาน class อื่น
ในการพัฒนา android app นั้นเมื่อโปรแกรมมีการทำงานที่ซับซ้อนนั้น หลักการพื้นฐานของ oop ก็น่าจะเป็นการสร้าง class เพื่อที่จะสร้าง object ที่ทำงานต่างกันไป วันนี้หลังจากหายไปนานไม่ได้เขียนบทความเลย เอาตัวอย่างการสร้าง Active List เมื่อ เลือก list แล้วก็จะไปเรียกใช้งาน class ต่างๆที่มีอยู่ครับเราไปดูกันเลย
หลังจากที่สร้างโปรเจ็คเสร็จแล้วให้เราทำการแก้ไขไฟล์หลัก ActiveList.java ให้ทำการ extends มาจาก ListActivity
เพื่อที่เราจะทำการหน้าตาแบบ list ได้ โดยมีโค้ดดังนี้
[sourcecode language=”java”]
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
android.R.layout.simple_list_item_1, menu));
}
}
[/sourcecode]
จากนั้นลองรันดูจะได้หน้าต่างแบบนี้
ซึ่งเมนูเราสร้างมาจาก String array ที่ชื่อว่า menu นั้นเองส่วนรูปแบบ style นั้นก็จะกำหนดโดย android.R.layout.simple_list_item_1 ซึ่งลองใช้แบบต่างๆดูได้ครับ ต่อมาเราจะมาสร้าง class ตามชื่อเมนูครับมีคลาสชื่อว่า? Helloword, Thaicoding
โดยทั้ง 2 คลาสไม่มีอะไรมาให้มัน extends มาจาก? Activity โดยไม่มีการทำงานอะไรมากเพิ่งแค่สร้าง TextView จากนั้นก็จะแสดงผลออกทางหน้าจอซึ่งต่างกันเฉพาะคำเท่านั้น
โค้ดทั้ง 2 คลาส
[sourcecode language=”java”]
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);
}
}
[/sourcecode]
เมื่อสร้างคลาสทั้ง 2 แล้วเราก็มากำหนด action ให้กับคลาสหลักให้ทำการเพิ่ม onListItemClick โดยมีโค้ดทั้งหมดดังนี้
[sourcecode language=”java”]
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
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();
}
}
}
[/sourcecode]
หลักจากที่เราเขียนโค้ดเสร็จแล้วก็กำหนดสิทธิการรันของ class ในไฟล์ AndroidManifest.xml โดยเพิ่ม tag ใหม่จะได้ดังนี้
[sourcecode language=”xml”]
[/sourcecode]
เมื่อเสร็จแล้วลองรันแล้วเลือกดูครับมันก็จะได้หน้าตาประมาณนี้ครับ
หลักการสำคัญให้สังเกต onListItemClick ให้ดีครับจะมีการใช้งาน
Class clazz = Class.forName(“com.thaicoding.activelist.” + testName);
ซึ่ง testName นั้นจะเป็นชื่อ class ที่อยู่ในตัวแปรเมนูนั้นเอง ซึ่งในการใช้งานแบบนี้เราต้องดูเรื่องของ package ของภาษาจาวาให้ดีนะครับ หวังว่าจากตัวอย่างนี้จะทำให้หลายคนเอาไปประยุกต์ใช้งานได้นะครับ