Xin xin chào chúng ta. Vào chủ thể bao gồm luôn luôn nhé, từ bây giờ bản thân sẽ lí giải các bạn thực hiện fragment vào android. Đây là một trong yếu tố tương đối đặc biệt quan trọng. Nó khá tương đương activity. Giờ bọn họ cùng tò mò nhé.
Bạn đang xem: Fragment trong android là gì
1. Fragment là gì ?... Một số định nghĩa cơ bản
Trong các áp dụng android, tại 1 thời điểm, chỉ gồm một Activity được hiển thị duy nhất bên trên màn hình. Chúng ta muốn chia màn hình hiển thị ra nhiều phần để dễ dàng áp dụng thì fragment đáp ứng nhu cầu điều đó
Fragment là một trong nguyên tố game android độc lập, được sử dụng do một activity, y như một sub-activity. Fragment có vòng đời với hình ảnh riêng. Các Fragment thông thường sẽ có một file java đi kèm với tệp tin đồ họa xml. Các fragment không tồn tại tệp tin bối cảnh xml hay được hotline là headless fragments.
Fragment sử dụng phương thức getActivity() để lấy ra Activity cha
Fragment được định nghĩa vào file xml của activity (static definition) hoặc có thể sửa thay đổi fragment Lúc đang chạy (dynamic definition)
2. Vòng đời vủa một Fragment

onCreate(): thực hiện khởi sản xuất fragment
onCreateView(): triển khai chế tạo ra giao diện(view), trả về view là bối cảnh tệp tin xml tương xứng fragment. ko đề nghị tương tác với activity vào hàm này bởi vì activity chưa được khởi chế tạo ra khá đầy đủ. Không nên thực hiện hàm này cùng với những fragment không có header
onActivityCreated(): triển khai chấm dứt nốt việc khởi chế tác activity với fragment. Trong bước này chúng ta cũng có thể gọi findViewById()
onStart(): thực hiện việc hiển thị fragment lên màn hình
onResume(): fragment chấp nhận chuyển động trả toàn
onPause(): fragment bị tạm dừng chuyển động, nó vẫn có thể được nhìn thấy
onStop(): fragment bị ẩn
onDestroyView(): giao diện(view) của fragment bị hủy. Nếu nó được call quay lại, nó vẫn trở lại triển khai hàm onCreateView()
onDestroy(): bị hủy
onDetach(): bị diệt hoàn toàn
3. Static Fragment
Static Fragment là vẻ bên ngoài fragment được knhì báo (định nghĩa) thẳng trong file activity_main.xml
lấy một ví dụ ta có 2 static fragment là MyFragment1.java(fragment1.xml) và MyFragment2.java(fragment2.xml) Chụ ý: những file đồ họa thường nhằm dạng LinearLayout. --> Mình cũng không ghi nhớ sản xuất sao bản thân lại ghi như thế này nữa :D. Các các bạn thông cảm)
Trong file activity_main.xml khai báo tĩnh
Thuộc tính class chỉ mang lại đường truyền cất file java tương ứng, thuộc tính layout_weight cho rằng fragment này chỉ chiếm một không gian bao nhiêu phía bên trong activity_main.xml
Chú ý: Bắt buộc phải có nằm trong tính android:id. Nếu ko sẽ gây nên lỗi.
Hai class MyFragment1.java và MyFragment2.java buộc phải extends FragmentVà nên ghi đè cổ phương thức onCreateView
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) super.onCreateView(inflater, container, savedInstanceState); View view = inflater.inflate(R.layout.fragment1, container, false); return view;
Ví dụ
MainActivity.javapackage com.example.haitm.fragmentdemo;import game android.tư vấn.v7.phầm mềm.AppCompatActivity;import app android.os.Bundle;public class MainActivity extends AppCompatActivity
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); MyFragment1
package com.example.haitm.fragmentdemo;import android.os.Bundle;import apk.tư vấn.annotation.Nullable;import android.tư vấn.v4.app.Fragment;import app android.view.LayoutInflater;import apk.view.View;import app android.view.ViewGroup;public class MyFragment1 extends Fragment
Nullable Bundle savedInstanceState) super.onCreateView(inflater, container, savedInstanceState); View view = inflater.inflate(R.layout.fragment1, container, false); return view; MyFragment2
package com.example.haitm.fragmentdemo;import apk.os.Bundle;import app android.tư vấn.annotation.Nullable;import app android.tư vấn.v4.ứng dụng.Fragment;import apk.view.LayoutInflater;import apk.view.View;import android.view.ViewGroup;public class MyFragment2 extends Fragment
Nullable Bundle savedInstanceState) super.onCreateView(inflater, container, savedInstanceState); View view = inflater.inflate(R.layout.fragment2, container, false); return view; fragment1.xml
fragment2.xml
main_activity.xml
Kết quả
4. Dynamics Fragment
Lớp FragmentManager có thể chấp nhận được thêm, xóa, sửa chữa thay thế fragment vào layout của activity. Sử dụng cách làm getFragmentManager() hoặc getSupportFragmentManager() để đưa ra một đối tượng FragmentManager Việc sửa thay đổi yêu cầu được tiến hành vào một giao dịch thanh toán thông qua lớp FragmentTransaction Để làm như thế, thông thường, họ quan niệm một FrameLayout duy trì chỗ trong tệp tin layout, kế tiếp dùng FragmentManager nhằm ghi đtrằn một fragment vào FrameLayout giữ lại nơi đóFragmentManager fm = getFragmentManager();// addFragmentTransaction ft_add = fm.beginTransaction();ft_add.add(R.id.your_placehodler,new YourFragment());ft_add.commit();// replaceFragmentTransaction ft_rep = fm.beginTransaction();ft_rep.replace(R.id.your_placehodler, new YourFragment());ft_rep.commit();// removeFragment fragment = fm.findFragmentById(R.id.your_placehodler);FragmentTransaction ft_remo = fm.beginTransaction();ft_remo.remove(fragment);ft_remo.commit();Ta rất có thể sử dụng cách tiến hành addToBackStack() để quay lại fragment trước kia (y như undo). lấy ví dụ, trong ví dụ bên trên ta thêm ft_rep.addToBackStack(null) vào trước ft_rep.commit(). Hệ thống vẫn đăng kí ft_rep vào vào sản phẩm đợi. Ta kích nút baông xã bên trên điện thoại, nó đã rước vào mặt hàng ngóng ra ft_rep cùng unvì lại (hiển thị lại fragment trước đó)
Thêm: Câu lệnh sau góp vấn đề gửi thân những fragment bắt mắt hơnfragmentTransaction1.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
Ví dụ:
Giống nhỏng ví dụ phần 4 mà lại chúng ta sửa lại chútMainActivity.java
package com.example.haitm.fragmentdemo;import game android.os.Bundle;import game android.support.v7.app.AppCompatActivity;import game android.view.View;import game android.widget.Button;public class MainActivity extends AppCompatActivity Button btn; apk.support.v4.tiện ích.FragmentManager fm;
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); fm = getSupportFragmentManager(); btn = (Button) findViewById(R.id.btn_add); btn.setOnClickListener(new View.OnClickListener()
Override public void onClick(View v) game android.support.v4.tiện ích.FragmentTransaction ft_add = fm.beginTransaction(); ft_add.add(R.id.frame_layout, new MyFragment1()); ft_add.commit(); ); Crúc ý: Các các bạn chăm chú knhị báo, import đúng phiên phiên bản. Bên MyFragment1.java mình sử dụng tlỗi viên android:support.v4.app thì mặt MainActivity các bạn cũng buộc phải thực hiện đúng tlỗi viện
main_activity.xml
Ví dụ này của bản thân khi kích button thì Fragment1 được tiếp tế.
kết quả:
5. Truyền dữ liệu thân các Fragment
Để truyền tài liệu thân những Fragment, ta thực hiện Bundle. Các bạn coi ví dụ sau đây.
MyFragment myFragment = new MyFragment();Bundle bundle = new Bundle();bundle.putString("url", "https://xuxu_minhanh");myFragment.setArguments(bundle);Trong tệp tin MyFagment.java, vào hàm onActivityCreated()
Override public void onActivityCreated(Bundle savedInstanceState) super.onActivityCreated(savedInstanceState); Bundle bundle = getArguments(); if (bundle != null) String liên kết = bundle.getString("url"); setText(link); liên kết github ví dụ: https://github.com/haitm11/FragmentDemoTđam mê khảo: http://www.vogella.com/tutorials/AndroidFragments/article.html