
(ZmikiSoft.com) – Fragment trong lập trình Android – phần 2.
Fragment (tạm dịch là Phân đoạn) không được giới thiệu là một trong các thành phần chính của Android, nhưng fragment cũng là một thành phần có vòng đời ( lifecycle) của riêng nó.
Để tạo một phân đoạn, bạn phải tạo một lớp con của Fragment
(hoặc một lớp con hiện tại của nó). Lớp Fragment
có mã trông rất giống một Activity
. Nó chứa các phương pháp gọi lại tương tự như hoạt động, chẳng hạn như onCreate()
, onStart()
, onPause()
, và onStop()
. Trên thực tế, nếu bạn đang chuyển đổi một ứng dụng Android hiện tại để sử dụng các phân đoạn, bạn có thể chỉ cần di chuyển mã khỏi các phương pháp gọi lại của hoạt động của bạn vào các phương pháp gọi lại tương ứng của phân đoạn của bạn.
Thường thì ít nhất bạn nên triển khai các phương pháp vòng đời sau:
onCreate()
- Hệ thống sẽ gọi phương pháp này khi tạo phân đoạn. Trong triển khai của mình, bạn nên khởi tạo các thành phần thiết yếu của phân đoạn mà bạn muốn giữ lại khi phân đoạn bị tạm dừng hoặc dừng hẳn, sau đó tiếp tục.
onCreateView()
- Hệ thống sẽ gọi phương pháp này khi đến lúc phân đoạn vẽ giao diện người dùng của nó lần đầu tiên. Để vẽ một UI cho phân đoạn của mình, bạn phải trả về một
View
từ phương pháp này, đây là gốc của bố trí phân đoạn của bạn. Bạn có thể trả về giá trị rỗng nếu phân đoạn không cung cấp UI. onPause()
- Hệ thống gọi phương pháp này là dấu hiệu đầu tiên về việc người dùng đang rời khỏi phân đoạn (mặc dù không phải lúc nào cũng có nghĩa rằng phân đoạn đang bị hủy). Trường hợp này thường là khi bạn định thực hiện bất kỳ thay đổi nào vẫn cần có hiệu lực ngoài phiên của người dùng hiện thời (vì người dùng có thể không quay lại).
Phần lớn ứng dụng nên triển khai ít nhất ba phương pháp sau đối với mọi phân đoạn, nhưng có một vài phương pháp gọi lại khác mà bạn cũng nên sử dụng để xử lý các giai đoạn khác nhau trong vòng đời của phân đoạn. Tất cả phương pháp gọi lại vòng đời được đề cập chi tiết hơn trong phần về Xử lý Vòng đời của Phân đoạn.
Cũng có một vài lớp con mà bạn có thể muốn mở rộng thay vì lớp cơ bản Fragment
:
DialogFragment
- Hiển thị một hộp thoại trôi nổi. Sử dụng lớp này để tạo một hộp thoại là một phương án hay cho việc sử dụng các phương pháp trình trợ giúp hộp thoại trong lớp
Activity
, vì bạn có thể kết hợp một hộp thoại phân đoạn vào ngăn xếp của các phân đoạn được quản lý bởi hoạt động, cho phép người dùng trả về một phân đoạn bị bỏ. ListFragment
- Hiển thị một danh sách các mục được quản lý bởi một trình điều hợp (chẳng hạn như một
SimpleCursorAdapter
), tương tự nhưListActivity
. Nó cung cấp một vài phương pháp để quản lý một dạng xem danh sách, chẳng hạn như phương pháp gọi lạionListItemClick()
để xử lý các sự kiện nhấp. PreferenceFragment
- Hiển thị một phân cấp các đối tượng
Preference
dưới dạng một danh sách, tương tự nhưPreferenceActivity
. Điều này hữu ích khi tạo một hoạt động “thiết đặt” cho ứng dụng của bạn.
Thêm một giao diện người dùng
Phân đoạn thường được sử dụng như một phần giao diện người dùng của hoạt động và đóng góp bố trí của chính nó cho hoạt động.
Để cung cấp một bố trí cho một phân đoạn, bạn phải triển khai phương pháp gọi lại onCreateView()
, phương pháp này được hệ thống Android gọi khi đến lúc phân đoạn vẽ bố trí của nó. Việc bạn triển khai phương pháp này phải trả về một View
là phần gốc cho bố trí phân đoạn của bạn.
Lưu ý: Nếu phân đoạn của bạn là một lớp con của ListFragment
, triển khai mặc định sẽ trả về một ListView
từ onCreateView()
, vì thế bạn không cần triển khai nó.
Để trả về một bố trí từ onCreateView()
, bạn có thể bung nó từ một tài nguyên bố trí được định nghĩa trong XML. Để giúp bạn làm vậy, onCreateView()
cung cấp một đối tượng LayoutInflater
.
Ví dụ, sau đây là một lớp con của Fragment
với chức năng nạp một bố trí từ tệp example_fragment.xml
:
public static class ExampleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.example_fragment, container, false); } }
Thêm một phân đoạn vào một hoạt động
Thường thì một phân đoạn đóng góp một phần UI vào hoạt động chủ, nó được nhúng như một phần trong phân cấp dạng xem tổng thể của hoạt động. Có hai cách mà bạn có thể thêm một phân đoạn vào bố trí của hoạt động:
- Khai báo phân đoạn bên trong tệp bố trí của hoạt động.Trong trường hợp này, bạn có thể chỉ định các tính chất bố trí cho phân đoạn như thể nó là một dạng xem. Ví dụ, sau đây là tệp bố trí cho một hoạt động có hai phân đoạn:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:name="com.example.news.ArticleListFragment" android:id="@+id/list" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" /> <fragment android:name="com.example.news.ArticleReaderFragment" android:id="@+id/viewer" android:layout_weight="2" android:layout_width="0dp" android:layout_height="match_parent" /> </LinearLayout>
Thuộc tính
android:name
trong<fragment>
sẽ chỉ định lớpFragment
để khởi tạo trong bố trí.Khi hệ thống tạo bố trí hoạt động này, nó sẽ khởi tạo từng phân đoạn được chỉ định trong bố trí và gọi ra phương pháp
onCreateView()
cho từng phân đoạn, để truy xuất bố trí của từng phân đoạn. Hệ thống sẽ chènView
được trả về bởi phân đoạn trực tiếp thế chỗ phần tử<fragment>
.Lưu ý: Mỗi phân đoạn yêu cầu một mã định danh duy nhất mà hệ thống có thể sử dụng để khôi phục phân đoạn nếu hoạt động bị khởi động lại (và bạn có thể sử dụng để nắm bắt phân đoạn sẽ thực hiện giao tác, chẳng hạn như gỡ bỏ nó). Có ba cách để cung cấp ID cho một phân đoạn:
- Cung cấp thuộc tính
android:id
với một ID duy nhất. - Cung cấp thuộc tính
android:tag
với một xâu duy nhất. - Nếu bạn không cung cấp được thuộc tính nào, hệ thống sẽ sử dụng ID của dạng xem của bộ chứa.
- Cung cấp thuộc tính
- Hoặc, bằng cách lập trình, thêm phân đoạn vào một
ViewGroup
hiện hữu.Vào bất cứ lúc nào trong khi hoạt động của bạn đang chạy, bạn có thể thêm phân đoạn vào bố trí hoạt động của mình. Bạn chỉ cần chỉ định mộtViewGroup
là nơi mà bạn sẽ đặt phân đoạn vào.Để thực hiện giao tác phân đoạn trong hoạt động của mình (chẳng hạn như thêm, gỡ bỏ, hay thay thế một phân đoạn), bạn phải sử dụng các API từFragmentTransaction
. Bạn có thể nhận một thực thể củaFragmentTransaction
từActivity
của mình như sau:FragmentManager fragmentManager =
getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction()
;Sau đó, bạn có thể thêm một phân đoạn bằng cách sử dụng phương pháp
add()
, chỉ định phân đoạn sẽ thêm và dạng xem mà bạn sẽ chèn nó vào. Ví dụ:ExampleFragment fragment = new ExampleFragment(); fragmentTransaction.add(R.id.fragment_container, fragment); fragmentTransaction.commit();
Tham đối đầu tiên được chuyển cho
add()
làViewGroup
, là nơi mà phân đoạn sẽ được đặt vào, được chỉ định bởi ID tài nguyên, và tham đối thứ hai là phân đoạn cần thêm.Sau khi bạn đã thực hiện các thay đổi của mình bằng
FragmentTransaction
, bạn phải gọicommit()
để các thay đổi có hiệu lực.
Khóa học lập trình Android
Khóa học lập trình Java
Khóa học lập trình iOS
Khóa học lập trình Objective-C/Swift