การสร้าง ActiveList แล้วเรียกใช้งาน class อื่น

การสร้าง ActiveList แล้วเรียกใช้งาน class อื่น

ในการพัฒนา android app นั้นเมื่อโปรแกรมมีการทำงานที่ซับซ้อนนั้น หลักการพื้นฐานของ oop ก็น่าจะเป็นการสร้าง class เพื่อที่จะสร้าง object ที่ทำงานต่างกันไป วันนี้หลังจากหายไปนานไม่ได้เขียนบทความเลย เอาตัวอย่างการสร้าง Active List เมื่อ เลือก list แล้วก็จะไปเรียกใช้งาน class ต่างๆที่มีอยู่ครับเราไปดูกันเลย

หัดเขียน android

หัดเขียน android

หลังจากที่สร้างโปรเจ็คเสร็จแล้วให้เราทำการแก้ไขไฟล์หลัก 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(this,
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(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();
}
}
}
[/sourcecode]

หลักจากที่เราเขียนโค้ดเสร็จแล้วก็กำหนดสิทธิการรันของ class ในไฟล์ AndroidManifest.xml โดยเพิ่ม tag ใหม่จะได้ดังนี้
[sourcecode language=”xml”]












[/sourcecode]

เมื่อเสร็จแล้วลองรันแล้วเลือกดูครับมันก็จะได้หน้าตาประมาณนี้ครับ

 

หลักการสำคัญให้สังเกต onListItemClick ให้ดีครับจะมีการใช้งาน

Class clazz = Class.forName(“com.thaicoding.activelist.” + testName);

ซึ่ง testName นั้นจะเป็นชื่อ class ที่อยู่ในตัวแปรเมนูนั้นเอง ซึ่งในการใช้งานแบบนี้เราต้องดูเรื่องของ package ของภาษาจาวาให้ดีนะครับ หวังว่าจากตัวอย่างนี้จะทำให้หลายคนเอาไปประยุกต์ใช้งานได้นะครับ

 

Download SourceCode

Leave a Reply

Your email address will not be published. Required fields are marked *