Tham khảo tài liệu ''giáo trình hình thành quy trình phân tích nguyên lý lập trình cơ bản với androi p3'', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả
B9: Việc cuối cần làm viết lại Activity Tới Example.java chỉnh sửa theo nội dung sau: Mã: package at.exam; import java.util.ArrayList; import import import import import import import import import import import import android.app.Activity; android.app.AlertDialog; android.content.DialogInterface; android.os.Bundle; android.view.Menu; android.view.MenuItem; android.view.View; android.view.View.OnClickListener; android.widget.ArrayAdapter; android.widget.Button; android.widget.EditText; android.widget.ListView; public class Example extends Activity { //Các dùng cho tạo Option Menu private static final int DELETE_WORK = Menu.FIRST; private static final int ABOUT = Menu.FIRST + 2; ArrayList array; ListWorkAdapter arrayAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); array = new ArrayList(); arrayAdapter = new ListWorkAdapter(this, R.layout.list, array); final EditText workEnter = (EditText) findViewById(R.id.work_enter); final EditText hourEdit = (EditText) findViewById(R.id.hour_edit); final EditText minuteEdit = (EditText) findViewById(R.id.minute_edit); final Button button = (Button) findViewById(R.id.button); //Tạo list view cho danh sách công việc final ListView list = (ListView) findViewById(R.id.list); list.setAdapter(arrayAdapter); OnClickListener add = new OnClickListener() { @Override public void onClick(View v) { if (workEnter.getText().toString().equals("") || hourEdit.getText().toString().equals("") || minuteEdit.getText().toString().equals("")) { AlertDialog.Builder builder = new AlertDialog.Builder(Example.this); builder.setTitle("Info missing"); builder.setMessage("Please enter all information of the work"); builder.setPositiveButton("Continue", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }); builder.show(); } else { String workContent = workEnter.getText().toString(); String timeContent = hourEdit.getText().toString() + ":" + minuteEdit.getText().toString(); Work work = new Work(workContent, timeContent); array.add(0, work); arrayAdapter.notifyDataSetChanged(); workEnter.setText(""); hourEdit.setText(""); minuteEdit.setText(""); } } }; button.setOnClickListener(add); } //Tạo Option Menu public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, DELETE_WORK, 0,"Delete" ).setIcon(android.R.drawable.ic_delete); menu.add(0, ABOUT, 0,"About" ).setIcon(android.R.drawable.ic_menu_info_details); return true; } //Xử lý kiện option Option Menu lựa chọn public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case DELETE_WORK: { deleteCheckedWork(); break; } case ABOUT: { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("VietAndroid"); builder.setMessage("AUTHOR:" + "\n" + " Nguyen Anh Tuan" + "\n" + "SOURCE:" + "\n" + " diendan.vietandroid.com"); builder.setPositiveButton("Close", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }); builder.setIcon(android.R.drawable.ic_dialog_info); builder.show(); break; } } return true; } private void deleteCheckedWork() { if (array.size() > 0) { for (int i = 0; i < array.size(); i++) { if (i > array.size()) { break; } if (array.get(i).isChecked()) { array.remove(i); arrayAdapter.notifyDataSetChanged(); continue; } } } } } OK Vậy xong Option Menu menu ẩn bạn nhấn nút Menu điện thoại Option Menu tiện việc đưa tùy chỉnh, giống bạn nhấn phím Esc chơi game PC Các bạn lưu ý thay sử dụng ArrayList trước thay ArrayList khởi tạo đối tượng arrayAdapter đối số thứ R.layout.list thay android.R.layout.simple_list_item_1, nghĩa sử dụng layout tự tạo thay layout Android cung cấp sẵn cho hiển thị thành phần ListView Nếu chạy thử, bạn thấy ta đánh dấu vào checkbox thành phần list, nhấn Menu chọn delete thành phần bị gỡ bỏ khỏi danh sách Trong sâu nói rõ Intent, phần đóng vai trị quan trọng lập trình ứng dụng Android Khái niệm Intent: Theo định nghĩa Google, Intent miêu tả hoạt động cần thực Cịn nói cách đơn giản dễ hiểu hơn, Intent cấu cho phép truyền thông điệp thành phần ứng dụng ứng dụng với Các thuộc tính Intent: - action: hành động thực hiện, vd : ACTION_VIEW, ACTION_MAIN - data: liệu xử lý action, thường diễn tả Uri (Uniform Resource Identifier, tham khảo http://en.wikipedia.org/wiki/Uniform rce_Identifier để hiểu rõ thêm chi tiết) VD: ACTION_VIEW content://contacts/people/1 - Hiển thị thông tin người với mã danh ACTION_DIAL content://contacts/people/1 - Hiển thị hình gọi đến người với mã danh ACTION_DIAL tel:123 - Hiển thị hình gọi với số gọi 123 Ngồi cịn có số thuộc tính mà ta bổ sung vào Intent: - category: bổ sung thêm thông tin cho action Intent VD: CATEGORY_LAUNCHER thông báo thêm vào Launcher ứng dụng top-level - type: rõ kiểu data - component: rõ thành phần nhận xử lý intent Khi thuộc tính xác định thuộc tính khác trở thành thuộc tính phụ - extras: mang theo đối tượng Bundle chứa giá trị bổ sung VD: ACTION_MAIN CATEGORY_HOME: trở hình Home Android (khi bấm nút Home di động) Phân loại Intent: Intent chia làm loại: - Explicit Intents: intent xác định thuộc tính component, nghĩa rõ thành phần nhận xử lý intent Thông thường intent dạng không bổ sung thêm thuộc tính khác action, data Explicit Intent thương sử dụng để khởi chạy activity ứng dụng - Implicit Intents: Intent không rõ component xử lý, thay vào bổ sung thơng tin thuộc tính Khi intent gửi đi, hệ thống dựa vào thông tin để định component thích hợp để xử lý VD: ACTION_DIAL tel:123 thơng thường hệ thống giao cho activity Phone Dialer mặc định Android xử lý Một số action thường sử dụng Intent: ACTION_ANSWER - mở Activity để xử lý gọi tới, thường Phone Dialer Android ACTION_CALL - mở Phone Dialer (mặc định PD Android) thực gọi dựa vào thông tin data URI ACTION_DELETE - mở Activity cho phép xóa liệu mà địa chứa data URI ACTION_DIAL - mở Phone Dialer (mặc định PD Android) điền thông tin lấy từ địa chứa data URI ACTION_EDIT - mở Activity cho phép chỉnh sửa liệu mà địa lấy từ data URI ACTION_SEND - mở Activity cho phép gửi liệu lấy từ data URI, kiểu liệu xác định thuộc tính type ACTION_SENDTO - mở Activity cho phép gửi thông điệp tới địa lấy từ data URI ACTION_VIEW - action thông dụng nhất, khởi chạy activity thích hợp để hiển thị liệu data URI ACTION_MAIN - sử dụng để khởi chạy Activity OK, lý thuyết tạm ổn Giờ chuyển qua phần thực hành để hiểu rõ cách sử dụng Intent Như nêu trên, Intent chia làm loại: explicit intent implicit intent Mỗi loại Intent có cách cài đặt sử dụng khác Using Explicit Intents Yêu cầu: Xây dựng chương trình gồm Activity Activity1 Activity chạy ban đầu lúc khởi động ứng dụng, cho phép nhập vào giá trị, cho phép khởi chạy Activity2 gửi giá trị tới Activity2 Activity2 nhận hiển thị giá trị, lại gửi giá trị tới BroadcastReceiver Cơ chế gửi khởi chạy Activity sử dụng thông qua Intent B1: Khởi tạo project: File -> New -> Android Project Project name: Explicit Intent Example Build Target: Chọn Android 1.5 Application name: Explicit Intent Example Package name: at.exam Create Activity: Activity1 => Kích nút Finish B2: Tạo giao diện cho Activity1 -> res\layout\main.xml chuyển tên thành activity1_layout.xml Mã: Layout cho Activity1 bao gồm LinearLayout chứa TextView, EditText để nhập giá trị (đã giới hạn kiểu nhập number), RelativeLayout có Button để khởi chạy Activity2 Mình sử dụng RelaytiveLayout để xếp Button xuống phía cuối giao diện ... android:layout_width="fill_parent" android:layout_height="fill_parent" >