0

當我從Tab中滑動到另一個fragment時,我必須刷新fragment如何在android中刷新頁面標籤片段?

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true); 
} 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    mBinding = DataBindingUtil.inflate(inflater, R.layout.manage_work_shop_act, container, false); 


    mBinding.layout.title.setText(getString(R.string.d_manage_my_staff)); 

    mBinding.tabs.setupWithViewPager(mBinding.viewpager); 
    setupViewPager(mBinding.viewpager); 

    mBinding.layout.nav.setVisibility(View.GONE); 
    mBinding.layout.navMenu.setVisibility(View.VISIBLE); 

    mBinding.layout.navMenu.setOnClickListener(view -> openDrawer()); 

    return mBinding.getRoot(); 
} 


private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager()); 

    int limit = (adapter.getCount() > 1 ? adapter.getCount() - 1 : 1); 

    adapter.addFragment(new MechanicListFragment(), getString(R.string.d_manage_my_staff)); 
    adapter.addFragment(new MechanicNewFragment(), getString(R.string.new_frag)); 
    viewPager.setAdapter(adapter); 
    viewPager.setOffscreenPageLimit(limit); 

    adapter.notifyDataSetChanged(); 
} 

我的適配器是這樣

public class ViewPagerAdapter extends FragmentPagerAdapter { 
private final List<Fragment> mFragmentList = new ArrayList<>(); 
private final List<String> mFragmentTitleList = new ArrayList<>(); 

public ViewPagerAdapter(FragmentManager manager) { 
    super(manager); 
} 

@Override 
public Fragment getItem(int position) { 
    return mFragmentList.get(position); 
} 

@Override 
public int getCount() { 
    return mFragmentList.size(); 
} 

public void addFragment(Fragment fragment, String title) { 
    mFragmentList.add(fragment); 
    mFragmentTitleList.add(title); 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    return mFragmentTitleList.get(position); 
} 
} 

我嘗試了所有刷新我fragment的方式。 如果我滑動選項卡或單擊另一個選項卡,然後我需要再次刷新可見選項卡。 在我目前的fragment沒刷新。

請幫我解決這個問題。

+0

使用後比斷枝碎片狀態尋呼機適配器適配器代碼also.Try如果你正在使用的話。 – Anonymous

+1

檢查此鏈接我的朋友https://stackoverflow.com/questions/32435250/android-viewpager-refresh-fragment –

+0

我已更新我的適配器類,請檢查 – AngelJanniee

回答

0

當您必須刷新adapdter中的選項卡時,嘗試使用片段狀態尋呼機適配器而不是片段適配器。

FragmentPagerAdapter存儲從適配器獲取的以前的數據,而FragmentStatePagerAdapter在每次執行時都從適配器獲取新值。

+0

我改變了這個樣子 public class ViewPagerAdapter extends FragmentStatePagerAdapter { 這不工作 – AngelJanniee

0

在片段中有onHiddenChanged方法。

時調用隱藏狀態(如由 片段是否隱藏()返回已經改變的片段開始時不隱藏;這將是 稱爲每當片段從改變狀態

。覆蓋onHiddenChanged方法在每個標籤片段,如果沒有隱藏做清爽例如:

class YourFragment extends Fragment { 

    @Override public void onHiddenChanged(boolean hidden) { 
     super.onHiddenChanged(hidden); 
     if (!hidden) { 
      //you can refresh here now 
     } 
    } 

}