Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 23

LẬP TRÌNH TRÊN THIẾT BỊ DI ĐỘNG

CHƯƠNG 3: Xây dựng giao diện vớn Fragment


Vấn đề Activity với Fragment
Trường Đại Học Ngoại ngữ Tin học – Huflit
Khoa CNTT

Faculty of Information Technology


Nội dung
• Các khái niệm cơ bản
• Fragment & Phiên bản hỗ trợ
• Vòng đời Fragment
• Giao diện XML
• Lưu trữ Fragment (Back Stack)
• Xây dựng và sử dụng Fragment
Fragment & Phiên bản hỗ trợ
• Fragment: đối tượng được nhúng trong Activity, cho phép thực hiện
nhận tương tác, có vòng đời riêng và thực hiện trao đổi thông tin với
Activity và các Fragment khác.

 Fragment API được thêm vào từ phiên bản Android HoneyComb


(API 11).
• Package: android.app.Fragment
• Phiên bản hỗ trợ:
• Package: android.support.v4.app.Fragment (API 4 – Android 1.6)
Fragment & Phiên bản hỗ trợ
Đặc điểm của Fragment
• Fragment có vòng đời và giao diện riêng.
• Các Fragment thường có một file java đi kèm với file giao diện xml.
Các fragment không có file giao diện xml thường được gọi là headless
fragments.
• Vòng đời của fragment bị ảnh hưởng trực tiếp bởi vòng đời của
activity chủ
• Fragment sử dụng phương thức getActivity() để lấy ra Activity cha
• Fragment được định nghĩa trong file xml của activity (static definition)
hoặc có thể sửa đổi fragment khi đang chạy (dynamic definition)
Vòng đời Fragment

• Vòng đời Fragment bao gồm các hàm quản lý trạng thái của Activity
và các hàm quản lý trạng thái riêng của Fragment, bao gồm:
• onAttach(Actvity): gọi một lần duy nhất trong vòng đời Fragment, ngay khi
Activity chứa nó được kích hoạt
• onCreate(Bundle): được gọi khi Fragment bắt đầu khởi tạo từ các dữ liệu đầu
vào.
• onCreateView(LayoutInflater, ViewGroup, Bundle): được gọi khi Fragment
bắt đầu vẽ UI lên màn hình.Nên thiết lập về giao diện. Sẽ được gọi lại khi mà
Fragment được gỡ ra khỏi Activity nhưng được đưa vào Back Stack, và được
gọi lại hiển thị sau đó.
Vòng đời Fragment

• onActivityCreated(Bundle): Được gọi ngay sau khi onCreateView() được gọi.


Nó báo hiệu trạng thái Activity chứa nó được khởi tạo hoàn toàn.
• onStart(): Khi Fragment bắt đầu được nhìn thấy bởi người dùng và chuẩn bị
nhận tương tác.
• onResume(): Người dùng hoàn toàn nhìn thấy và tương tác được với
Fragment.
• onPause(): dấu hiệu cho thấy rằng người dùng đang rời khỏi Fragment hiện
tại.
Vòng đời Fragment

• onStop(): Fragment chính thức không còn được nhìn thấy nữa.
• onDestroyView(): Chắc chắn là đối tượng View sẽ bị hủy
ở callback này. Và do đó các khởi tạo view ở onCreateView() sẽ
nhanh chóng không còn nữa. Nếu như Fragment được đưa
vào Back Stack, thì khi được lấy ra lại sau
đó, callback onCreateView() sẽ được gọi lại.
• onDestroy(): Fragment đã sắp kết thúc.
• onDetach():  Fragment sẽ được gỡ khỏi Activity đang chứa nó.
Kết thúc vòng đời của Fragment.
Fragment & Phiên bản hỗ trợ
• Các lớp Fragment:
• Fragment
• ListFragment
• DialogFragment
• PreferenceFragment
• WebViewFragment
ListFragment

 ListFragment giúp cho bạn có thể thiết


kế ra một Fragment có
chứa ListView một cách nhanh chóng
DialogFragment

 DialogFragment được Android đưa


ra nhằm thay thế cho Dialog cũ
DialogFragment hoàn toàn có thể
kế thừa được các callback từ vòng
đời của Fragment.
PreferenceFragment

 Có thể sửng dụng để tạo ra các tùy


chọn cho việc xây dựng giao diện
cho màn hình Cài đặt (Settings) của
ứng dụng
WebViewFragment

lớp WebViewFragment đã bị Google loại bỏ


từ phiên bản API level 28.
Giao diện
• Giao diện Fragment có thể được khởi tạo trực tiếp thông qua thẻ <fragment>
trong XML.
• Các thuộc tính quan trọng:
• class: <Class extends Fragment> (Pakage Name + Class Name)
• name: <Class extends Fragment> (Pakage Name + Class Name)
• id: Identifier Resource
• tag: String Resource
• layout_width – layout_height: Dimen
• layout_weight: Integer
• lauout_gravity: Gravity
• layout_margin<Postion>: Dimen
Giao diện
• Ví dụ: giao diện Fragment trong XML.
• fragment_layout.xml:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
class=“com.htsi.demofragment.ImageFragment”
android:id=“@+id/imageFragment”
android:tag=“ImageFramgent”
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:layout_margin=“@dimen/marginFragment” />
• Sử dụng trong MainActivity.java như một layout bình thường:
setContentView(R.layout.fragment_layout);
Lưu trữ Fragment (backstack)
• Việc lưu trữ Fragment bao gồm hai giai đoạn:
• Lưu trữ trạng thái Fragment thông qua biến Bundle:
• Truy xuất biến Bundle trong hàm onSaveInstanceState
• Truyền các thông tin cần lưu trữ vào biến Bundle
• Đưa Fragment vào Stack:
• Thực hiện khai báo Fragment
• Cho phép nhúng Fragment vào Activity
• Dùng phương thức addToBackStack(String Tag) trong đối tượng quản lý Fragment để
đưa Fragment vào Stack.
• Có thể truy xuất lại đối tượng Fragment thông qua Tag, hoặc khi phím “Back” trên
thiết bị được nhấn.
Xây dựng và sử dụng Fragment
• Thực hiện xây dựng Fragment:
• Khai báo lớp kế thừa từ lớp Fragment
• Gọi phương thức onCreateView thực hiện tạo giao diện cho Fragment.
• Ví dụ về tạo lớp Fragment và giao diện:
public class ImageFragment extends Fragment {
public View onCreateView(LayoutInflater inflater,ViewGroup parent, Bundle b )
{
View rootView = inflater.inflat(R.layout.fragment_main, null);
return rootView;
}
}
Xây dựng và sử dụng Fragment
• Sử dụng Fragment trong Activity, bao gồm hai cách:
• Thực hiện tham chiếu Fragment từ giao diện XML của
Activity.
• Khai báo đối tượng FragmentManger, cho phép nhúng
Fragment vào Activity từ JavaCode.
Xây dựng và sử dụng Fragment

• FragmentManager:
• Đối tượng quản lý Fragment trong Activity.
• Tạo đối tượng FragmentManger:
• getFragmentManager (API 11 trở lên)
• getSupportFragmentManager (android.support.vx)
• FragmentTransaction: đối tượng cho phép thực thi các thao tác quản
lý Fragment.
• Tạo đối tượng FragmentTransaction từ FragmentManager:
• FragmentTransaction ft = getFragmentManager.beginTransaction();
Xây dựng và sử dụng Fragment

• FragmentTransaction:
• Một số phương thức quan trọng
• add()
• attach() - detach()
• replace()
• hide() – show()
• remove()
• addToBackStack()
• setTransition()
• commit()
Xây dựng và sử dụng Fragment

• Ví dụ thao tác thêm Fragment vào Activity:


// Tạo đối tượng quản lý
FragmentManager manager = getFragmentManager();
// Tạo đối tượng thực hiện phiên tương tác
FragmentTransaction transaction = manager.beginTransaction();
// Tạo đối tượng Fragment
ImageFragment fragment = new ImagerFragment();
// Thiết lập chế độ chuyển hoạt
transaction.setTrainsition(FragmentTransition.TRANSIT_ENTER_MASK);
// Thực hiện thêm Fragment vào Activity
transaction.add(R.id.container, fragment);
// Đưa phiên tương tác vào Stack
transaction.addToBackStack(null);
// Xác nhận tương tác
transaction.commit();
Thảo luận

You might also like