Một Fragment
là một phương pháp hữu ích, tôi nghĩ rằng, khi bạn muốn để buộc một số logic kinh doanh UI với một đặc biệt View
(hoặc một nhóm). Như bạn đã biết, cá nhân Fragment
có các cuộc gọi lại vòng đời của chính nó và như vậy, giống như một Activity
.
Thay vì có một máy chủ duy nhất Activity
nhiều ListView
s thông qua một đơn PagerAdapter
, nó thể được sạch hơn để sử dụng cách tiếp cận Fragment
vì Fragment
chỉ cần để đối phó với logic đằng sau lái đơn ListView
.
Đây là tình huống rất giống với tình huống tôi vừa đối mặt. Tôi đang hiển thị các biểu mẫu cuộn dọc khác nhau (bao gồm nhiều trường nhập) trong một số ViewPager
. Trong trường hợp của tôi, tôi đã đi theo phương pháp Fragment
vì trong trường hợp của tôi, có thể là ViewPager
thực sự sẽ cần hiển thị một loại xem hoàn toàn khác trên các trang nhất định. Ví dụ: trên một vài trang đầu tiên, biểu mẫu nhập của người dùng có thể được hiển thị. Nhưng trên trang cuối cùng, một đồ thị sẽ được hiển thị. Một bộ logic riêng biệt được yêu cầu để điều khiển biểu đồ đó. Để thúc đẩy các biểu mẫu đầu vào đó và một biểu đồ từ một đơn Activity
sẽ bị lộn xộn một chút và có lẽ tôi sẽ cần phải chứa logic nghiệp vụ trong một số lớp đại biểu hoặc một thứ gì đó. Vì vậy, đối với tôi, Fragment
s là sự lựa chọn hiển nhiên cuối cùng. Tôi có InputFormFragment
và GraphFragment
của mình và mỗi cái chỉ chứa logic áp dụng cho các số View
mà chúng cung cấp.
Một điều cần lưu ý là trong tương lai gần bạn cũng có thể muốn hiển thị một loại khác nhau của View
trong số ViewPager
. Hoặc, bạn có thể muốn có bố cục giao diện người dùng khác hoàn toàn, có lẽ một bố cục không sử dụng ViewPager
nhưng hiển thị tất cả từ bên này sang bên kia (ví dụ: bố cục được sử dụng trên máy tính bảng lớn ở chế độ ngang). Với Fragment
s, mọi thứ chỉ là mô-đun nhiều hơn và bạn có thể yếu tố mã để làm điều này nhanh hơn. Mặt khác, nếu bạn đạt được mục tiêu của mình bằng cách sử dụng một đơn Activity
có chứa đơn giản PagerAdapter
và tất cả logic cho ListView
s bên trong, bạn có thể thấy cần nhiều công việc hơn trong tương lai để hỗ trợ các loại mới của bố cục máy tính bảng đặc biệt View
hoặc .
Một điều tôi sẽ nói là đã thực hiện Fragment
s trong một ViewPager
bản thân mình thông qua FragmentPagerAdapter
và FragmentStatePagerAdapter
, mọi thứ có thể nhận được một chút vụng về nếu bạn có bất kỳ yêu cầu đặc biệt; quản lý Fragment
s đôi khi có thể phức tạp. Ví dụ: đối với giao diện người dùng của tôi, tôi cần có thể thêm và xóa theo cách lập trình ViewPager
chứa Fragment
s. Tôi cũng cần đảm bảo rằng bộ điều hợp đang sử dụng không phá hủy Fragment
giây khi chúng đã được hiển thị, bởi vì tôi cần thu thập dữ liệu từ tất cả đồng thời Fragment
s tại một thời điểm nhất định. Hơn nữa, tôi phải gia hạn và sửa đổi FragmentPagerAdatper
để đảm bảo rằng các Fragment
s đi qua onDestroy()
đúng cách của chúng và được xóa khỏi FragmentManager
khi ViewPager
bị xóa.
Fragment
s cho phép một cách rất mô-đun để xây dựng giao diện người dùng cho các kích thước màn hình khác nhau và định hướng, và tuyệt vời trong cách chúng cho phép bạn đóng gói logic kinh doanh và vòng đời cho các yếu tố giao diện người dùng riêng lẻ. Tuy nhiên, nếu kịch bản của bạn thực sự đơn giản như một số ListView
s trong một ViewPager
và bạn biết rằng bạn sẽ không bao giờ cần mô đun, thì chi phí của Fragment
s có thể là quá mức cần thiết.
Về việc thu thập thông tin từ các đoạn, sẽ dễ dàng hơn khi tạo giao diện, có phân đoạn lưu trữ tham chiếu tới đối tượng triển khai và sử dụng chức năng giao diện để lưu trữ thông tin trong đối tượng đó không? –
Nếu tôi hiểu đúng, tôi nghĩ những gì bạn đang gợi ý là thay vì cần phải làm những điều thông minh để đảm bảo tất cả các mảnh vỡ ở xung quanh trong ViewPager (và không liên tục bị giết và sau đó được tạo lại), thay vào đó tôi nên có một cơ chế để duy trì trạng thái của họ. Tôi có thể đã làm điều này và tôi đồng ý rằng đó là một cách tiếp cận tốt hơn, nhưng các mảnh vỡ trong ứng dụng cụ thể của tôi là khá tốn kém để xây dựng. Đối với cả hai lý do mã hóa và hiệu suất, nó đơn giản hơn để đảm bảo tất cả các Fragments ở lại xung quanh, và sau đó yêu cầu tất cả chúng đều gửi dữ liệu của chúng lại với nhau. – Trevor