การใช้งาน ListActivity เบื้องต้น 1
วันนี้จะมาลองทำ ListActivity แบบเบื้องต้นกันครับ
- ขั้นแรกสร้างโปรเจ็คขึ้นมาก่อนครับ ในที่นี้ขอตั้งชื่อโปรเจ็คว่า SimpleListview นะครับ วิธีการสร้างโปรเจ็คสามารถดูได้จากในโพสต์ก่อนหน้านะครับ
- ขั้นตอนต่อไปเปิดไฟล์ res/layout/activity_main.xml ขึ้นมาครับ ชื่อไฟล์ใครจะต่างจากนี้ก็ได้ครับ แล้วแก้ไขดังนี้
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
ในโค้ด xml ด้านบนก็ทำการเพิ่ม ListView เข้าไปนะครับ โดยกำหนด id เป็น @android:id/list เราจำเป็นต้องกำหนดแบบนี้ ถ้าเราต้องการใช้ activity ของเรา extends class ListActivity ถ้าไม่กำหนดจะเกิด error ครับ จริงๆแล้วเราสามารถย่อเหลือแค่นี้ก็ได้ครับ
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
เพราะในหน้ัานี้เรามี view แค่อันเดียวคือ ListView นั่นเอง หน้าตาแบบ graphic ก็จะประมาณนี้ครับ
-
จากนั้นเรามาดูในส่วนของ activity กันบ้างครับ
package com.example.simplelistview;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends ListActivity {
String[] fruits = {
"Apple",
"Banana",
"Durian",
"Guava",
"Mango",
"Mangosteen",
"Rambutant",
"Melon",
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, fruits));
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
String selected = fruits[position];
Toast.makeText(this, "you select " + selected, Toast.LENGTH_SHORT).show();
}
}
ใน Activity ของเราจะครับ จากเดิมที่เรา extends จาก Activity ก็เปลี่ยนมาเป็น extends จาก ListActivity จากนั้นกำหนดตัวแปร fruits เป็น Array String ขึ้นมาเก็บชื่อผลไม้ไว้ เข้ามาใน method onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // เรียก parent constructor
setContentView(R.layout.activity_main); // set layout
setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, fruits));
// ทำการ set item ให้กับ listview ของเรา โดยสามารถแตกคำสั่งออกมาได้ดังนี้
// ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, fruits);
// setListAdapter(adapter);
}
ในส่วนของการ setListAdapter ด้านบนนั้น เราสร้าง ArrayAdapter ชนิด String ขึ้นมา(เพราะเราส่ง string array เข้าไปให้) เราส่งค่าให้กับ ArrayAdapter ในตอนที่ new 3 ค่า คือ context, id ของ views ที่จะใช้ในแต่ละแถว ในตัวอย่างใช้ layout ที่มีมาอยู่แล้วใน android , ตัวแปร fruits
ถึงตรงนี้เราสามรถ run โปรเจ็คดูได้แล้วครับ ถ้าหากถูกต้องหน้าตาก็จะออกมาประมาณนี้
-
ลองทำให้คลิกแล้วเกิดอะไรสักอย่างดู
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
{
String selected = fruits[position];
Toast.makeText(this, "you select " + selected, Toast.LENGTH_SHORT).show();
}
override method onListItemClick ครับ เวลาที่เราคลิกที่ item ใน list method นี้จะถูกเรียกใช้งาน การทำงานก็คือนำค่า position ที่ได้มาไปหาค่าจากใน fruits จากนั้นก็ แสดงออกมาทางหน้าจอครับ
เมื่อเราคลิกก็จะมี popup แจ้งว่าเราคลิกอะไร ตัวอย่างนี้ก็จบแค่นี้แหละครับ อันนี้เป็นแค่ตัวอย่างการใช้งานอย่างง่าย คราวหน้าเราจะมาลองทำแบบที่ซับซ้อนมากกว่านี้ดูครับ