Hướng Dẫn Fragment Android

Hôm ni mình đã chia sẻ cho các bạn biện pháp add fragment vào Activity Android. Bài này là phần 3 của series “Hướng dẫn toàn tập về phong thái thực hiện Fragment trong Android“.

Bạn đang xem: Hướng dẫn fragment android


Nội dung chính của bài xích viết

1. Cách tạo nên một fragment vào Android2. Add fragment vào Activity2.2 Add fragment trải qua code

Phần 3: Create và add Fragment vào Activity vào Android

Bài viết trước họ sẽ bên nhau tìm hiểu về vòng đời của Fragment – điều nhưng mà tất cả những bạn cần phải cầm có thể trước lúc bắt tay vào code.

Sau Khi đã thấm nhuần định hướng, chúng ta bắt tay vào bài toán trước tiên đó là sinh sản một Fragment. Khi có được một fragment thì làm thế nào “nhồi” nó vào được Activity nhằm hiển thị ra màn hình?

Let’s go…

1. Cách chế tạo một fragment vào Android

Quay lại ứng dụng Rage Comics,  khi khởi động vận dụng dứt vẫn hiển thị một list những Rages. lúc touch vào bất cứ mục như thế nào vẫn hiển thị thông tin (tạm thời Call là trang detail) về comic kia. Để bước đầu, bạn cần có tác dụng trở lại có nghĩa là chế tạo ra trang detail đã.

Thứ nhất mở thỏng mục app vào Android Studio (chưa biết setup Android Studio chuẩn chỉnh nhấn đây nhé) cùng tra cứu file layout cho trang detail fragment_rage_comic_details.xml theo mặt đường dẫn tiện ích -> res -> layout. Chúng ta kiến tạo màn hình hiển thị theo bố cục tổng quan gồm: một Image và bên dưới là text diễn tả. Các chúng ta xem thêm bố cục tổng quan nlỗi hình bên dưới.

*

Sau Khi xây dựng layout xong xuôi thì chuyển quý phái code logic. Các các bạn vào Android Studio’s Project tab  lựa chọn tệp tin RageComicDetailsFragment.kt. Đây đó là tệp tin Fragment để chúng ta code phần hiển thị đến trang detail.

Trong RageComicDetailsFragment.kt đoạn code đang như sau:

import apk.os.Bundleimport app android.support.v4.app.Fragmentimport apk.view.LayoutInflaterimport apk.view.Viewimport app android.view.ViewGroup//1class RageComicDetailsFragment : Fragment() //2 companion object fun newInstance(): RageComicDetailsFragment return RageComicDetailsFragment() //3 override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? return inflater?.inflate(R.layout.fragment_rage_comic_details, container, false) Mình vẫn lý giải một chút ít về đoạn code trên:

Knhị báo RageComicDetailsFragment là một trong những class nhỏ của Fragment (Nếu bạn chưa biết đến khái niệm class nhỏ, class phụ vương thì bạn cần tìm hiểu thêm về lập trình sẵn hướng đối tượng người sử dụng, cũng nhanh khô thôi)Cung cung cấp hàm khởi tạo thành instance mang lại fragment. Tại đây chính là một dạng factory methodCuối cùng là override lại hàm onCreateView để rất có thể nhồi file layout xml vào fragment class.

Activity thực hiện setContentView() nhằm nhồi xml layout thì fragments tiến hành vào hàm onCreateView()

Tđê mê số thứ 3 của inflate xác định liệu gồm thêm fragment vào container giỏi không? (false là ko thêm). Container là view phụ thân với nó đã đựng những view của fragment. quý khách nên được sắp xếp giá trị là false vị bắt buộc để việc thêm fragment vào containner mang lại FragmentManager đảm nhiệm

Mỗi Activity sẽ sở hữu một FragmentManager. Như tên gọi của nó thì FragmentManagergồm trách nhiệm cai quản những fragment được đính thêm trên Activity. Nó gồm có hàm để truy vấn, thêm với xóa fragments.

♦ Đọc thêm về debug Android Studio chứ đọng nhỉ?

Tại sao lại sử dụng factory method cố vị hàm contructor để tạo fragment?

Trong trả lời này, mình áp dụng factory method để khởi tạo fragment gắng bởi áp dụng constructor. Nhiều bạn sẽ thắc mắc tại sao lại vậy đúng không?

Thứ đọng nhất: Do chúng ta ko có mang bất kỳ constructor làm sao, trình biên dịch auto tạo ra một constructor mặc định, không có đối số đầy đủ nhằm tạo ra i Đây là toàn bộ phần nhiều gì bạn cần phải có cho 1 fragment.Thđọng hai: Khi vận dụng đưa sang trọng chạy nền(background) thì Android đã destroy Activities thuộc toàn bộ những fragment liên quan. Khi Activity được visibile trở lại, FragmentManager sẽ tạo lại các fragment bằng cách áp dụng constructor trống rỗng khoác định. Nếu nó không tìm thấy thì sẽ ảnh hưởng exception.

Xem thêm: 679 Món Nui Là Cái Gì ? Sự Thật Nui Rau Củ Giảm Cân & Nui Cho Bé Ăn Dặm

Do đó, giải pháp code hoàn hảo duy nhất không nên sản xuất class với constructor có tđắm say số. Nếu gồm chế tạo constructor có tsi số thì đề xuất chúng ta nên viết thêm hàm constructor ko tđắm đuối số. Cách đơn giản và dễ dàng tốt nhất là sử dụng factory method như mình làm nghỉ ngơi bên trên.

2. Add fragment vào Activity

Có 2 phương pháp để thêm 1 fragment:

Cách dễ dàng và đơn giản độc nhất là add fragment trực tiếp vào XML layout. Cách này làm cho thì nhanh hao dẫu vậy bao gồm điểm yếu là không linh động với khó khăn trong bài toán điều đình tài liệu giữa những fragmentCách thứ 2 là áp dụng code để add fragment

Mình vẫn trình làng thứu tự cả 2 cách thêm fragment này.

2.1 Thêm thẳng Fragment bởi XML

Để thao tác này, trước tiên mở activity_main.xml cùng sản xuất bên trong FrameLayout

Trong công đoạn này các bạn đặt tại phía bên trong của activity layout và chỉ định và hướng dẫn class fragment trải qua nằm trong tính class. View ID của rất cần được thưởng thức thông qua FragmentManager.

OK. quý khách demo build test xem thành quả nhé

*

2.2 Add fragment thông qua code

Trước hết, msinh sống activity_main.xml cùng xóa thẻ nhưng mà các bạn mới cung ứng cơ mà bạn vừa có tác dụng lúc trước. Với cách thêm fragment bởi code thì họ ko buộc phải thẻ trong XML. Bạn đã thay thế nó bởi vì code viết bằng Kotlin

Msống RageComicListFragment.kt để triển khai chỉnh sửa code.

Bạn imports những packages như bên dưới:

import game android.os.Bundleimport apk.tư vấn.v7.widget.GridLayoutManagerGridLayoutManagergiúp bài toán xác định các items vào danh sách Rage Comic.

Bên vào của RageComicListFragment.kt, thêm nhì cách thức sau nhằm chế tạo RageComicAdapter

override fun onAttach(context: Context?) super.onAttach(context) // Get rage face names và descriptions. val resources = context!!.resources names = resources.getStringArray(R.array.names) descriptions = resources.getStringArray(R.array.descriptions) urls = resources.getStringArray(R.array.urls) // Get rage face images. val typedArray = resources.obtainTypedArray(R.array.images) val imageCount = names.kích thước imageResIds = IntArray(imageCount) for (i in 0..imageCount - 1) imageResIds = typedArray.getResourceId(i, 0) typedArray.recycle() override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? val view: View = inflater!!.inflate(R.layout.fragment_rage_comic_menu, container, false) val activity = activity val recyclerView = view.findViewById(R.id.recycler_view) as RecyclerView recyclerView.layoutManager = GridLayoutManager(activity, 2) recyclerView.adapter = RageComicAdapter(activity) return view Hàm onAttach() cất code hoàn toàn có thể truy cập những resource mà lại bạn phải thông qua Context cơ mà fragment đi cùng. Bởi bởi vì họ viết đoạn code này làm việc trong onAttach(), bạn cũng có thể yên vai trung phong rằng fragment này chắc chắn gồm một Context phù hợp lệ.

Để có thể chế tạo ra danh sách Rage Comic, họ thực hiện RecyclerView

Tiếp theo mở MainActivity.kt và thay thế onCreate()cùng với đoạn code dưới đây:

Tại đây, bạn sẽ đặt RageComicListFragment vào trong MainActivity.

override fun onCreate(savedInstanceState: Bundle?) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) if (savedInstanceState == null) supportFragmentManager .beginTransaction() .add(R.id.root_layout, RageComicListFragment.newInstance(), "rageComicList") .commit() Để ý nhé, nếu khách hàng sử dụng tlỗi viện support v4 thì vắt vì gọi Fragment Manager, các bạn Call hàm supportFragmentManager (Hai class này còn có phương châm tương đương nhau)

Sau đó, chúng ta ban đầu sinh sản một transaction bằng bài toán gọi cho tới beginTransaction.

Hàm add()tất cả 3 tđam mê số mà lại bạn cần nhằm ý:

View ID của một container của framelayout trong apk của Activity. Nếu bạn quan sát vào xml, các bạn sẽ tra cứu thấy