2011-10-26 38 views
5

Tôi đang sử dụng ViewPager với tùy chỉnh PagerFragmentAdapter sử dụng danh sách nội bộ để cung cấp phân đoạn. Tôi muốn thêm và xóa các phân đoạn động trên các thay đổi cài đặt.Thêm và xóa các phân đoạn động trong ViewPager

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_pager); 
    mAdapter = new ServicePagerAdapter(getSupportFragmentManager()); 
    mPager = (ViewPager) findViewById(R.id.pager); 
    mPager.setAdapter(mAdapter); 
} 

tôi đã cố gắng gọi lại các setAdapter nhưng tôi có được một IllegalStateException (Can not perform this action after onSaveInstanceState).

Làm cách nào để đạt được mục đích của mình?

Trả lời

2

Bạn không cần đặt lại ServicePagerAdapter mỗi lần. Đủ để tạo và đặt nó một lần theo phương thức của phương thức Activity (hoặc trong phương thức onActivityCreated() của bạn Fragment) và sau đó bạn có thể chỉ cần gọi phương thức add() của bộ điều hợp để thêm các phần tử mới vào nó. Nhưng đừng quên gọi notifyDataSetChanged() sau mỗi lần thêm vào bộ đổi nguồn.

+0

Thật không may nó không phải là dễ dàng như vậy. FragmentPagerAdapter lưu trữ Fragments, bạn phải tạo một PagerAdapter tùy chỉnh hoặc sử dụng một số thủ thuật. – Matroska

+0

trong mẫu mã của bạn mà bạn đề cập đến 'ServicePagerAdapter' - đây không phải là một lớp thư viện, vì vậy tôi giả sử bạn đã sử dụng bộ điều hợp tùy chỉnh. Vì vậy, có, bạn cần thực hiện tùy chỉnh của lớp 'PagerAdapter'. Về câu hỏi chính của bạn - tôi nghĩ rằng nó đã được trả lời. – HitOdessit

+2

Không đủ để gọi notificationDataSetChanged() trên PagerAdapter nếu các phần tử đã bị xóa. Bạn cũng cần ghi đè phương thức getItemPosition của PagerAdapter. Trả lại POSITION_UNCHANGED nếu phần tử vẫn ở đó hoặc POSITION_NONE nếu phần tử đã bị xóa. –

Các vấn đề liên quan