Tôi đang sử dụng Viewpager
với số FragmentPagerAdapter
để cho phép thêm và xóa trang. Mỗi trang hiển thị dữ liệu thu được từ internet.Viewpager và FragmentPagerAdapter: Xóa trang xem
Khi một trang mới được thêm vào, một Phân đoạn mới được liên kết với trang đó. Dữ liệu thu được thông qua AsyncTask và được hiển thị trong Fragment. Khi người dùng chọn xóa một trang, ý tưởng là phá hủy trang và Phân đoạn liên quan.
Nói chung, tất cả đều hoạt động tốt. Vấn đề tôi đang nhìn thấy là như sau:
Bạn có ba trang với các dữ liệu:
[Trang 1] [Trang 2] [Trang 3]
Bạn xóa bất kỳ trang khác trang cuối cùng, nói trang 2; Trang 2 biến mất như mong muốn:
[Trang 1] [Trang 3]
Bạn thêm một trang mới; nhưng thay vì trang trống, mới, trang mới hiển thị dữ liệu (xem) từ trang 3.
[Trang 1] [Trang 3] [Trang 4, nên là blank]
việc loại bỏ mã trang trong hoạt động của tôi là như sau:
// Destroy fragment for this page
DataListFragment curFrag = getFragmentByName(currentPage);
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().remove(curFrag).commit();
fm.executePendingTransactions();
curFrag = null;
// Remove page and update adapter
mPageTitles.remove(position);
mAdapter.notifyDataSetChanged();
Sử dụng trình gỡ lỗi, nó cho thấy rằng các mảnh vỡ được lấy ra từ các FragmentManager
sau cuộc gọi executePendingTransactions()
. Nhưng trong cuộc gọi FrampePagerAdapters
, mAdapter.notifyDataSetChanged()
, đoạn được thêm lại vào và sau đó được hiển thị khi trang mới được tạo.
Tôi đã thử sử dụng FrameStatePagerAdapter, vì điều đó sẽ cho phép phá hủy các đoạn, nhưng nó không hoạt động. Trong phương thức getItemPosition()
của FragmentPagerAdapter, tôi sử dụng return FragmentAdapter.POSITION_NONE;
như được chỉ ra trong một bài viết SO khác mà tôi đã xem xét.
Dường như Chế độ xem cho trang đó không bị hủy, nhưng sau đó được thêm lại vào trang mới. Tôi đã thử sử dụng phương thức removeViewAt()
trên giao diện của trang mới, nhưng điều đó không hiệu quả.
Là mới đến này, tôi chắc chắn rằng tôi đang thiếu một cái gì đó rõ ràng ...
Tôi không chắc chắn rằng đó là một cái gì đó rõ ràng. Tôi cũng đang gặp vấn đề này. Bạn đã giải quyết nó? Có thể có câu trả lời ở đây: http://stackoverflow.com/questions/12510404/reorder-pages-in-fragmentstatepageradapter-using-getitempositionobject-object –
Bạn có thể chỉ cho chúng tôi phương pháp ghi đè của bạn: public fragment getItem (int position) – Gomino
Khi nào bạn đang xóa một đoạn, bạn không xóa nó khỏi bộ điều hợp. Đó là lý do tại sao nó lại xuất hiện. Bạn cần phải loại bỏ nó khỏi adapter của bạn (không phải xem, nhưng Item, mà bạn sử dụng trong phương thức getItem()). đoạn thứ 4 trông giống như phần thứ ba vì nó sử dụng lại đoạn, giống như adapter của ListView. Bạn có sai lầm trong logic bộ điều hợp. Hiển thị lớp bộ điều hợp của bạn –