Sunday, May 25, 2014
Lưu trữ trong Android (SQLite)
[Đang thực hiện...]
Lưu trữ trong Android (SharePreference & File)
[Đang thực hiện...]
Spinner, Adapter, ViewHolder, Listview, Gridview
[Đang thực hiện...]
Sunday, May 11, 2014
Menu và Actionbar
Có 2 dạng menu cơ bản trong ứng dụng Android đó là Context Menu và Option Menu (từ các phiên bản Android 4.x trở lên thì có thể hiểu là Action Bar). Trong bài viết này chúng ta sẽ đi tìm hiểu 2 loại menu này.
Các bước để tạo Context Menu
Bước 1: Khai báo menu (tạo mới 1 file menu_phone.xml trong thư mục menu) và viết mã code như bên dưới.
Bước 2: Trong hàm onCreateContextMenu thì đăng ký hiển thị menu xml vừa tạo ở trên.
Bước 3: Trong hàm onContextItemSelected đăng ký xử lý sự kiện khi click lựa chọn trên menu
Bước 4: Đăng ký Context Menu cho một đối tượng trên layout của Activity.
Từ phiên bản Android > 2.3 thì Option Menu được hiểu như Actionbar và trông có dạng như sau:
Để tạo option menu - actionbar ta làm theo các bước như sau:
Bước 1: Khai báo file menu menu_main.xml trong thư mục menu với nội dung như sau:
Bước 2: Trong hàm onCreateOptionsMenu đăng ký sử dụng menu đã viết ở trên.
Source code ví dụ có thể tải tại đây.
Context Menu
Đây là dạng menu hiển thị lựa chọn khi người dùng thao tác với 1 đối tượng trong nhóm đối tượng có cùng tính chất. Ví dụ như khi thao tác chọn với 1 danh sách sinh viên, ta có thể đưa ra context menu với các tùy chọn như: thêm, sửa, xóa, hiển thị chi tiết. Để sử dụng context menu, người dùng cần đăng ký đối tượng cho context menu. Để gọi, người dùng cần bấm giữ đối tượng trong vài giây.Các bước để tạo Context Menu
Bước 1: Khai báo menu (tạo mới 1 file menu_phone.xml trong thư mục menu) và viết mã code như bên dưới.
Bước 2: Trong hàm onCreateContextMenu thì đăng ký hiển thị menu xml vừa tạo ở trên.
getMenuInflater().inflate(R.menu.menu_phone, menu);
Bước 3: Trong hàm onContextItemSelected đăng ký xử lý sự kiện khi click lựa chọn trên menu
@Override public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item .getMenuInfo(); String name = mContact[info.position]; switch (item.getItemId()) { case R.id.menu_call: Toast.makeText(ContextMenu2Activity.this, "Call to " + name, Toast.LENGTH_SHORT).show(); break; case R.id.menu_sms: Toast.makeText(ContextMenu2Activity.this, "SMS to " + name, Toast.LENGTH_SHORT).show(); break; default: Toast.makeText(ContextMenu2Activity.this, "Do some thing with " + name, Toast.LENGTH_SHORT).show(); break; } return super.onContextItemSelected(item); }
Bước 4: Đăng ký Context Menu cho một đối tượng trên layout của Activity.
registerForContextMenu(listContact);
Option Menu - Actionbar
Đối với các phiên bản Android 2.3 trở về trước, Option Menu trông có dạng như sau:Từ phiên bản Android > 2.3 thì Option Menu được hiểu như Actionbar và trông có dạng như sau:
Để tạo option menu - actionbar ta làm theo các bước như sau:
Bước 1: Khai báo file menu menu_main.xml trong thư mục menu với nội dung như sau:
Bước 2: Trong hàm onCreateOptionsMenu đăng ký sử dụng menu đã viết ở trên.
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); menu.add(1, 999, 999, "Menu 999").setIcon(R.drawable.more); return true; }Bước 3: Trong hàm onOptionsItemSelected đăng ký xử lý sự kiện khi click và item của menu.
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_1: Intent intent_1 = new Intent(MainActivity.this, ContextMenu1Activity.class); startActivity(intent_1); return true; case R.id.menu_2: Intent intent_2 = new Intent(MainActivity.this, ContextMenu2Activity.class); startActivity(intent_2); return true; case R.id.menu_3: return true; case R.id.menu_4: return true; case R.id.menu_5: return true; default: return super.onOptionsItemSelected(item); } }
Source code ví dụ có thể tải tại đây.
Friday, May 9, 2014
Fragment
Tổng quan
Fragment có thể hiểu như là những "mảnh" nội dung độc lập được chèn vào bên trong activity. Chúng ta xem qua một số tình huống bên dưới để hiểu cách Fragment sử dụng trong lập trình Android.Tình huống 1: Trên màn hình ứng dụng chúng ta muốn thể hiện 2 phần nội dụng. Phần 1 hiển thị một danh sách (ListView) các địa chỉ website, phần 2 dùng một WebView để hiển thị nội dung.
![]() |
...hiển thị nội dung website được chọn ở ListView... |
![]() |
...hiển thị nội dung ảnh.. |
![]() |
Hiển thị trên tablet và phone |
Lợi ích
Sử dụng Fragment đem lại những ưu điểm như:- Giúp cho việc tái sử dụng các thành phần trên các layout khác nhau trở nên dễ dàng.
- Hỗ trợ việc hiển thị layout dạng dọc (portrait) hay ngang (landscape) ở trên bất kỳ điện thoại hay máy tính bảng nào.
- Giúp nhà phát triển kiểm soát việc hiển thị cửa sổ đơn (single-pane) trên điện thoại và hiển thị đa cửa sổ (multi-pane) trên tablet.
Vòng đời
Cũng giống activity, fragment có vòng đời của riêng nó trải qua các bước như onCreate, onStart, onResume, onPause, onStop... tuy nhiên thì nó không phụ thuộc vào vòng đời của activity mà nó đính vào.Phương thức | Mô tả |
---|---|
onAttach() | Fragment được đính vào activity. Activity lúc này cũng có thể chưa được khởi tạo đầy đủ. |
onCreate() | Fragment được tạo. |
onCreateView() | Fragment được tạo với giao diện đầy đủ. Giao diện view của fragment trở thành một phần trong giao diện view phân cấp của activity. |
onActivityCreated() | Activity và fragment được khởi tạo đầy đủ. Lúc này, view có thể được truy cập bởi phướng thức findViewById() . |
onResume() | Fragment được kích hoạt và hiển thị lên giao diện người dùng. |
onPause() | Fragment vẫn tồn tại nhưng không hoạt động, tình huống này được hiểu như là một activity khác đang đè lên activity chứa fragment. |
onStop() | Fragment bị hủy. |
Định nghĩa và sử dụng
Khai báo class kế thừa class Fragmentpublic class DetailFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_rssitem_detail, container, false); return view; } public void setText(String item) { TextView view = (TextView) getView().findViewById(R.id.detailsText); view.setText(item); } }
Sử dụng Fragment kiểu tĩnh (statically)
Sử dụng Fragment kiểu động (dynamically)
public class DebugExampleTwo extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initFragment(new DebugExampleTwoFragment()); } protected void initFragment(Fragment fragment) { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(android.R.id.content, fragment); fragmentTransaction.commit(); } }Source code ví dụ có thể tải tại đây.
Subscribe to:
Posts (Atom)