Đây là một câu hỏi cũ, nhưng dù sao đi nữa đây là một số thông tin với hy vọng rằng nó sẽ giúp một ai đó.
ViewPager hoạt động cùng với bộ điều hợp được thiết lập cho nó thông qua ViewPager # setAdapter(). Trong trường hợp của câu hỏi này, có vẻ như FragmentPagerAdapter được sử dụng như một bộ điều hợp (vì bộ điều hợp này đặt tên cho các mảnh android: switcher: [x]: [y] như xuất hiện trong trường hợp ngoại lệ).
Một phát hiện quan trọng về FragmentPagerAdapter là thế này:
FragmentPagerAdapter sở hữu các mảnh vỡ phân bổ được sử dụng trong các ViewPager.
Người dùng của ViewPager với kết hợp của ViewPagerAdapter có để xác định một lớp con của FragmentPagerAdapter thực hiện phương pháp GetItem(), prototyped như sau:
public abstract Fragment getItem(int position);
Chức năng này tạo ra các mảnh vỡ khác nhau được sử dụng bởi ViewPager như các trang . Việc triển khai phương thức này nên được xem như một dịch vụ được cung cấp bởi lớp con tới FragmentPagerAdapter() để phân bổ các đoạn.
Nói cách khác, mặc dù phân lớp phân bổ các đoạn không phải là chủ sở hữu của chúng.
Vì, như đã nói ở trên, chủ sở hữu của các đoạn là FragmentPagerAdapter, tất cả các thao tác phân đoạn (theo nghĩa FragmentManager/FragmentTransaction) chỉ được thực hiện bởi FragmentPagerAdapter.
Cố gắng thực hiện các thao tác trên các đoạn này có thể ảnh hưởng đến hoạt động bình thường của ViewPager và gây ra hành vi không xác định.
Trong trường hợp của câu hỏi này, có một nỗ lực để loại bỏ một trong các phân đoạn được sử dụng bởi ViewPager bên ngoài FragmentPagerAdapter mà giải thích là xấu và có thể kích hoạt một chuỗi kết thúc với ngoại lệ này.
Khi cần thiết phải tự động xóa/thêm/thay thế các trang trong ViewPager cách thực hiện để gọi notifyDataSetChanged() trên bộ điều hợp.
Chúc may mắn!
bản sao có thể có của [Android: không thể thay thế một đoạn bằng một đoạn khác] (http://stackoverflow.com/questions/5907673/android-cant-replace-one-fragment-with-another) – bernie
Theo dõi ngoại lệ sẽ trợ giúp . Điều tương tự đang xảy ra với tôi - không phải trên loại bỏ, mặc dù, trên ViewPager.setCurrentItem (int). –
Bạn có ý nghĩa gì khi xóa phân đoạn khỏi ViewPager. ViewPager quản lý tuổi thọ của Fragment.Bạn phải loại bỏ những thứ như bạn sẽ loại bỏ trong một listview, bằng cách sử dụng các phương pháp của adapter. Bạn có thể làm rõ? –