Dẫn nhập

Tại bài học kinh nghiệm trước họ vẫn có tác dụng quen thuộc cùng với ACTIVITY & VÒNG ĐỜI CỦA ỨNG DỤNG

Với vấn đề càng ngày càng đa dạng và phong phú vật dụng Android Ra đời thì người ta đã nghĩ về ra những cách khác biệt nhằm bố trí đồ họa vận dụng làm sao để cho cân xứng để tận dụng tối đa diện tích S screen. Một trong các chính là Fragment. Bài viết này bọn họ sẽ cùng tìm hiểu về nó.

Bạn đang xem: Fragment là gì

Nội dung

Để đọc gọi bài bác này tốt nhất có thể các bạn buộc phải có kiến thức và kỹ năng cơ bản về các phần:

Trong bài học này, chúng ta đang thuộc tìm hiểu các vấn đề:

Fragment là gì?Vòng đời của Fragment.Cách chế tạo ra một Activity cùng với Fragment cơ phiên bản.Tích thích hợp Backstaông xã đến Fragment trong Activity sẽ chế tạo.

Fragment

Fragment là gì?

Thứ nhất chúng ta xem 2 hình phía dưới.

*
*

OK, bạn dấn xét thế nào?

Rõ ràng ở hình thứ 2, phương pháp phân bố những cửa nhà được tận dụng giỏi rộng. Mỗi mục phía trái khớp ứng với một văn bản mặt đề nghị. So với Việc chỉ hiển thị đầu mục Setting như hình đầu tiên.

Đó cũng là ưu điểm khi áp dụng Fragment!

Mặt khác, chúng ta có thể hiểu: Fragment là 1 trong dạng nhiều Activity bé, lồng vào Activity bà bầu. Các Fragment cũng cài vòng đời (Lifecycle) của chính mình, vòng đời của Fragment cùng tương đương ngay sát tương tự như nhỏng Activity (như là mang đến 89%).

Tạo một Fragment

Các chúng ta có thể tưởng tượng rằng một Fragment là một trong những vùng chứa trong Activity, một module riêng biệt. Và nó bao gồm vòng đời của chính mình.

Bài viết này chủ yếu là thực hành, cùng họ sẽ làm cho một ứng dụng nhỏ dại có tên FragmentExample, bao gồm sử dụng Fragment trong tlỗi viện Android Support Library (hỗ trợ mang lại Android đời cũ tận 1.6).

Bước 1: Chúng ta vẫn tạo một project bình thường như mỗi một khi, cùng với Activity là Empty Activity:

*

MainActivity.java

public class MainActivity extends AppCompatActivity
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); activity_main.xml

Bước 2: Thêm Fragment vào XML

Mặc mặc dù Fragment bao gồm tính module hóa cao, rất có thể được tái sử dụng. Nhưng mỗi Fragment ước ao sử dụng hồ hết cần đính với cùng 1 Activity mẹ. Do kia, họ vẫn cung ứng vào Activity bao gồm nhỏng sau, bên cạnh đó gửi RelativeLayout quý phái dạng LinearLayout đến dễ dàng hình dung:

Cùng nhìn lại kiến tạo của XML, họ đang thấy fragment đã làm được tạm bợ dựng (“tạm” nhé, vì chưng chưa tồn tại câu chữ, dẫu vậy đã thấy được chiều cao của nó):

*

Bước 3: Tạo những fragment tương ứng:

Nlỗi chúng ta đang thấy, sinh sống bên trên bọn họ vẫn có mang 2 fragment vào Activity. Fragment thực chất là một dạng Activity nhỏ, vì vậy họ phải dựng một class riêng cho nó để dễ dàng cai quản.

Chúng ta sẽ khởi tạo một class thương hiệu là Fragment1 với kế thừa tự lớp game android.support.v4.app.Fragment:

*

Đặt thương hiệu class là Fragment1.java và code sẽ có được câu chữ nhỏng sau:

package com.alokapidakaldim.com.fragmentexample;import apk.os.Bundle;import game android.tư vấn.annotation.Nullable;import apk.support.v4.ứng dụng.Fragment;import game android.view.LayoutInflater;import apk.view.View;import game android.view.ViewGroup;public class Fragment1 extends Fragment
Nullable
Override public View onCreateView(LayoutInflater inflater,
Nullable ViewGroup container,
Nullable Bundle savedInstanceState) return super.onCreateView(inflater, container, savedInstanceState); Tiếp mang lại là Fragment2.java cũng tương tự:package com.alokapidakaldim.com.fragmentexample;import android.os.Bundle;import game android.support.annotation.Nullable;import apk.tư vấn.v4.app.Fragment;import android.view.LayoutInflater;import game android.view.View;import apk.view.ViewGroup;public class Fragment2 extends Fragment
Nullable
Override public View onCreateView(LayoutInflater inflater,
Nullable ViewGroup container,
Nullable Bundle savedInstanceState) return super.onCreateView(inflater, container, savedInstanceState); Khoan! Tại sao lại là onCreateView nhưng mà không hẳn là onCreate?

Như sẽ đề cập các lần ngơi nghỉ trên, Fragment không phải Activity nhưng mà cất vào Activity. Nó gồm vòng đời riêng rẽ, layout riêng và chính vì như vậy đang nên một số chế độ không giống để đổ tài liệu với những View vào bên trong. Hãy nhìn qua sơ thứ vòng đời của Fragment:

*

Đấy, những thao tác làm việc rẽ nhánh bây giờ đã có được đưa lịch sự 2 bước mới là onCreateView cùng onDestroyView.

Bước 4: Tạo tệp tin layout đến Fragment.

Một Fragment cũng đều có layout nlỗi Activity mà thôi, cùng vì vậy bọn họ buộc phải sản xuất layout đến nó. Chuột phải vào tlỗi mục res/layout > New > Layout resource file:

*

Chúng ta viết tên đến layout là fragment_1, trong Fragment này ta sẽ đặt một TextView cùng với câu chữ tùy ý, đầy đủ code XML tất cả nội dung nlỗi sau:

Tương tự, họ tạo thành thêm một layout nữa có tên fragment_2: Bước 5: Liên kết class java cùng với layout fragment:

Class java đã bao gồm, XML cũng đã tất cả, tiếng bọn họ ban đầu link fragment cùng với layout tương ứng. Nếu nhỏng vào Activity, bọn họ sử dụng setContentView thì làm việc Fragment, bọn họ cần sử dụng tmê say số đầu vào Inflater để nhét layout, vấn đề thực hiện cũng khác:

Fragment_1.java

package com.alokapidakaldim.com.fragmentexample;import apk.os.Bundle;import android.tư vấn.annotation.Nullable;import game android.tư vấn.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class Fragment1 extends Fragment
Nullable
Override public View onCreateView(LayoutInflater inflater,
Nullable ViewGroup container,
Nullable Bundle savedInstanceState) return inflater.inflate(R.layout.fragment_1, container, false); Fragment_2.java

package com.alokapidakaldim.com.fragmentexample;import apk.os.Bundle;import android.tư vấn.annotation.Nullable;import app android.support.v4.phầm mềm.Fragment;import apk.view.LayoutInflater;import app android.view.View;import android.view.ViewGroup;public class Fragment2 extends Fragment
Nullable
Override public View onCreateView(LayoutInflater inflater,
Nullable ViewGroup container,
Nullable Bundle savedInstanceState) return inflater.inflate(R.layout.fragment_2, container, false); Bước 6: Sau Khi sẵn sàng kết thúc xuôi. Activity vẫn tất cả, 2 Fragment cũng đã tất cả. Giờ họ sẽ liên kết bọn chúng lại. Rất đơn giản, chỉ bài toán sửa thay đổi một chút sinh sống tệp tin activity_main.xml nlỗi sau:

Việc knhì báo siêu đơn giản và dễ dàng, cần không nào? Chạy thử thôi:

*

Cơ chế Backstack

Với hầu hết phân tích và lý giải cùng ví dụ tại đoạn bên trên, chúng ta vẫn biết phương pháp để gán 2 Fragment vào một Activity. Việc gán những Fragment vào Activity cũng thế.

Xem thêm: Phần Mềm Synaptics Pointing Device Là Gì, Nó Ảnh Hưởng Gì Đến Máy Tính Không

Vậy đưa sử vào trường thích hợp bạn chỉ có một form Fragment, và ao ước hân oán thay đổi các Fragment khác theo lần lượt vào chiếc size đó thì sao? Và câu hỏi gì xẩy ra trường hợp họ nhận nút ít Back (xoay lại) trên máy?

Các bạn hãy chú ý hình biểu đạt sau:

*

Chúng ta rất nhiều mong ước giải pháp hồ hết sản phẩm ra mắt đang như trên. Khi gửi fragment cùng dấn bachồng thì fragment cũ sẽ được mang lại. Nhưng thực tiễn đang là…

*

Tại sao? Vì nút ít Back bên trên thứ Android mặc định đang chỉ có chức năng cùng với Activity đã hiện lên chứ chưa phải Fragment. Và chính vì thế chúng ta sẽ đề xuất sử dụng Fragment Backstack: Đưa những Fragment vào một trong những ngăn uống xếp (y như khi bạn coi sóc website vậy, nhấn back thì trình để ý đã trở lại trang trước đó).

Cách 1: Cách triển khai cũng không khó. Vẫn sử dụng project nhưng bọn họ sẽ code, thêm vào một trong những Activity không giống lâm thời gọi là BackstackActivity:

*

BackstackActivity.java

package com.alokapidakaldim.com.fragmentexample;import apk.os.Bundle;import game android.support.annotation.Nullable;import app android.support.v7.app.AppCompatActivity;public class BackstackActivity extends AppCompatActivity
Override protected void onCreate(
Nullable Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_backstack); Và cùng với đó là 1 trong tệp tin layout tương ứng:activity_backstaông xã.xml

Các bạn để ý tag FrameLayout nghỉ ngơi bên trên, đây đã là loại size nhưng mà lát nữa bọn họ sẽ đổ fragment vào. Được ư? Quá được chđọng, Fragment rất có thể được đổ vào layout bất kỳ. Nút ít Clichồng me đang là nút mà lại họ áp dụng để gửi Fragment vào ví dụ này.

Bước 2: Đây bắt đầu là phần tốt.

Để đọc Fragment Backstaông xã thì dĩ nhiên là chúng ta cần… Fragment. Sau Khi làm cho ví dụ ở chỗ trên thì bây giờ họ sẽ tất cả 2 chiếc là Fragment_1 và Fragment_2, và 2 Fragment này trọn vẹn có thể được thực hiện lại.

Và Android hỗ trợ một công cụ cực kỳ tuyệt vời và hoàn hảo nhất để cai quản Fragment. Đó là class FragmentManager. Nó để giúp đỡ chúng ta đổi khác / thêm / bỏ Fragment tùy ý. Để coi bọn chúng có gì khác biệt, chúng ta đã viết từng hàm riêng lẻ, kế tiếp Điện thoại tư vấn trong onCreate để biết bản lĩnh của từng cái:

Kiểu 1: Fragment_2 sửa chữa trọn vẹn Fragment_1, Fragment_1 bị diệt. Đơn giản là chỉ cần Lấy Fragment_2 chiếm vị trí của Fragment_1 cơ mà thôi:

Thêm 2 loại sau vào fragment_1.xml:

Để đến chữ thanh lịch bên đề xuất, lát nữa bọn họ đang biết chức năng ^^Sửa đổi file AndroidManifest.xml nhằm hướng dẫn và chỉ định BackstackActivity là Activity khởi chạy: Cách 3: Cuối cùng sửa file BackstackActivity hệt như sau. Hơi nhiều năm chút ít tuy nhiên các bạn chú ý mấy chỗ đánh vàng sơn xanh là đủ:

package com.alokapidakaldim.com.fragmentexample;import game android.os.Bundle;import app android.tư vấn.annotation.Nullable;import apk.support.v4.app.Fragment;import app android.tư vấn.v4.phầm mềm.FragmentManager;import android.support.v4.ứng dụng.FragmentTransaction;import app android.support.v7.phầm mềm.AppCompatActivity;import app android.util.Log;import android.view.View;import apk.widget.Button;public class BackstackActivity extends AppCompatActivity private Button btnFrag;
Override protected void onCreate(
Nullable Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_backstack); btnFrag = (Button) findViewById(R.id.btn_replace_fragment); btnFrag.setOnClickListener(new View.OnClickListener()
Override public void onClick(View view) replaceFragmentContent(new Fragment2()); Log.e("Replaced fragment", "2"); ); initFragment(); private void initFragment() Fragment1 firstFragment = new Fragment1(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction ft = fragmentManager.beginTransaction(); ft.replace(R.id.container_body toàn thân, firstFragment); ft.commit(); protected void replaceFragmentContent(Fragment fragment) if (fragment != null) FragmentManager fmgr = getSupportFragmentManager(); FragmentTransaction ft = fmgr.beginTransaction(); ft.replace(R.id.container_body toàn thân, fragment); ft.commit(); Ta khởi chế tác và nhét Fragment_1 vào Activity ngay trong lúc Activity hiện nay hình bằng phương pháp điện thoại tư vấn hàm initFragment() vào onCreate().Mình viết hàm replaceFragmentContent nhằm sửa chữa thay thế chiếc container_body (vốn đó là chiếc FrameLayout vào activity_backstachồng.xml đó. Sau đó đặt sự kiện đến mẫu nút: Lúc bnóng nút thì Fragment_2 đang nhẩy vào.Tức là lúc msống lên, không bấm nút, nó vẫn nỗ lực này:

*

Và sau khi bnóng nút, nó vẫn rứa này:

*

Mình cố ý nhằm hiện tại Android Monitor nhằm các bạn cũng có thể coi log kia. Nhớ tận dụng log để test nhé.

Ấy mặc dù thế Lúc chúng ta dìm nút Back thì…

*

Bùm! Activity đã bị hủy. Đó nguyên nhân là nút ít back chỉ tính năng lên Activity, và không tồn tại Fragment làm sao không giống vào list Backstaông chồng (như thể bài toán bàn cờ tất cả 2 quân, quân này nạp năng lượng quân cơ thì chỉ còn 1).

Và để làm mang lại nút Back sau khoản thời gian dấn đang quay trở lại về Fragment_1 thì họ viết 1 hàm khác với Gọi ra trong Activithệt như sau:

package com.alokapidakaldim.com.fragmentexample;import android.os.Bundle;import game android.tư vấn.annotation.Nullable;import game android.support.v4.phầm mềm.Fragment;import apk.tư vấn.v4.ứng dụng.FragmentManager;import apk.support.v4.ứng dụng.FragmentTransaction;import game android.tư vấn.v7.tiện ích.AppCompatActivity;import game android.util.Log;import apk.view.View;import android.widget.Button;public class BackstackActivity extends AppCompatActivity private Button btnFrag;
Override protected void onCreate(
Nullable Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_backstack); btnFrag = (Button) findViewById(R.id.btn_replace_fragment); btnFrag.setOnClickListener(new View.OnClickListener()
Override public void onClick(View view) addFragment(new Fragment2()); Log.e("Replaced fragment", "2"); ); initFragment(); private void initFragment() Fragment1 firstFragment = new Fragment1(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction ft = fragmentManager.beginTransaction(); ft.replace(R.id.container_toàn thân, firstFragment); ft.commit(); protected void replaceFragmentContent(Fragment fragment) if (fragment != null) FragmentManager fmgr = getSupportFragmentManager(); FragmentTransaction ft = fmgr.beginTransaction(); ft.replace(R.id.container_body, fragment); ft.commit(); protected void addFragment(Fragment fragment) FragmentManager fmgr = getSupportFragmentManager(); FragmentTransaction ft = fmgr.beginTransaction(); ft.add(R.id.container_body, fragment); ft.addToBackStack(fragment.getClass().getSimpleName()); ft.commit(); Chạy thử như thế nào, Lúc chúng ta thừa nhận nút ít thì màn hình đã gửi sang trọng Fragment_2:

*

Và lúc dấn Back thì…

*

Không gồm gì cực nhọc đọc, bắt buộc không nào?

Kết luận

Qua bài này họ sẽ thay được Fragment là gì, mối quan hệ của chính nó với Activity, cùng cách sinh sản một Fragment dễ dàng và đơn giản. Và bề ngoài Backstachồng.

Chúng ta đang tìm hiểu về loại kiến thiết Material Design của Google, cũng như quy chuẩn code Android (Coding Convention) công dụng qua bài tiếp theo: MATERIAL DESIGN & CODING CONVENTION

Cảm ơn các bạn đang quan sát và theo dõi nội dung bài viết. Hãy còn lại bình luận hoặc góp ý của chính bản thân mình nhằm trở nên tân tiến nội dung bài viết xuất sắc hơn. Đừng quên “Luyện tập – Thử thách – Không không tự tin khó”.

Tải xuống


Tài liệu

Nhằm Giao hàng mục tiêu học tập Offline của xã hội, Kteam hỗ trợ thiên tài tàng trữ câu chữ bài học kinh nghiệm Fragment và cơ chế BackStack dưới dạng tệp tin PDF vào liên kết bên dưới.

Xem thêm: Canal Basin Là Gì ? Nghĩa Của Từ Basin Trong Tiếng Việt Nghĩa Của Từ Basin

Bên cạnh đó, chúng ta cũng có thể search thấy các tư liệu được góp phần từ bỏ xã hội sống mục TÀI LIỆU trên tlỗi viện alokapidakaldim.com.com

Đừng quên like với share để cỗ vũ Kteam với người sáng tác nhé!

*

Thảo luận

Nếu chúng ta có bất kỳ khó khăn tốt vướng mắc gì về khóa học, chớ ngần ngại đặt thắc mắc trong phần BÌNH LUẬN dưới hoặc trong mục HỎI & ĐÁPhường trên tlỗi viện alokapidakaldim.com.com nhằm cảm nhận sự hỗ trợ tự xã hội.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *