5

enter image description hereLàm cách nào để tải lại/làm mới phân đoạn đã được hiển thị một lần?

  • tôi có 2 Fragment s: My1stFragmentMy2ndFragment.
  • Bên trong My1stFragment Tôi có một ListView được điền bởi cơ sở dữ liệu. Ngoài ra khi tôi nhấp vào nút chỉnh sửa, tôi gọi số 2 Fragment để chỉnh sửa dữ liệu.
  • Trong 2nd Fragment Tôi chỉnh sửa số tiền lương và cập nhật cơ sở dữ liệu của mình bằng cách nhấp vào nút gửi và quay lại My1stFragment.
  • Vấn đề là khi tôi quay lại My1stFragment, ListView của tôi không được cập nhật, mặc dù cơ sở dữ liệu đã được cập nhật.
+0

bạn đang sử dụng một bộ nạp con trỏ? – Raghunandan

+0

Tôi đang nhận dữ liệu nhưng tôi không thể làm mới Chế độ xem danh sách. –

Trả lời

2

Rút ra lớp PagerAdapter của bạn như

public static class MyPagerAdapter extends FragmentStatePagerAdapter 

thay vì

public static class MyPagerAdapter extends FragmentPagerAdapter 

Về cơ bản, FragmentPagerAdapter giữ tạo Fragment s trong bộ nhớ, trong khi FragmentStatePagerAdapter huỷ hoại và tạo cho họ một lần nữa khi chúng được chuyển trong và ngoài tầm nhìn.

cân nhắc thêm:

1. Hãy chắc chắn rằng bạn đang không gọi setRetainInstance(true) trong bất kỳ Fragment của bạn, nếu không họ sẽ không được làm mới/cập nhật.

2. Thêm

viewPager.setOffscreenPageLimit(0); 

mã của bạn. Điều này đảm bảo rằng Fragment s liền kề được tạo lại.

3. Thay vì

Activity -> ViewPager -> Fragments 

tạo cấu trúc như

Activity -> Fragment -> ViewPager -> Nested Fragments 

Điều này sẽ đảm bảo rằng mỗi Fragment được làm mới trên trang swipe. Xem this post để thực hiện.

EDIT:

Như đã thảo luận trong các ý kiến ​​dưới đây, điểm 2 là không cần thiết. Vì vậy, chỉ có điểm 1 và 3 thực sự hữu ích trong trường hợp này.

+0

chắc chắn về điểm thứ hai? https://code.google.com/p/android/issues/detail?id=56667#c3. Theo mặc định của nó 1 !. – Raghunandan

+0

điểm tuyệt vời, rất tốt :) Tôi cho rằng khuyến nghị thứ hai là dư thừa, vì mức tối thiểu được thiết lập nội bộ là 1. –

+0

@ Y.S Cảm ơn bạn đã giúp dễ hiểu và thực hiện cũng tôi giới thiệu đơn giản, dễ dàng và tốt này. –

4

Add sau trong firstFragment của bạn:

@Override 
public void setUserVisibleHint(boolean isVisibleToUser){ 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     Log.e("Visible hint","in visibleHint()"); 
     //add your method to set adapter to listview here by passing (getActivity().getApplicationContext()) parameter for context 
    } 
} 

Bây giờ khi bạn muốn đến đoạn đầu tiên từ mảnh khác, sử dụng:

((ActivityOfFragment) getActivity())./*viewPager if any.*/setCurrentItem(0/*fragment position*/, true); 
+0

cảm ơn tôi cũng đã thử điều này. các công trình của nó. –

+0

@RamMansawala Pleasure :) – DancingMonkeyOnLaughingBuffalo

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