TabLayout+ViewPager+Fragment, 為什么Fragment不走onHiddenChanged方法
uj5u.com熱心網友回復:
因為Fragment都是被銷毀后新建的,不是原來的uj5u.com熱心網友回復:
先設定viewpager的setOffscreenPageLimit為fragment的總數,防止fragment銷毀,其次,切換fragment會呼叫setUserVisibleHint方法,而不是onHiddenChanged。具體看FragmentPagerAdapter中的代碼,參考
public abstract class FragmentPagerAdapter extends PagerAdapter {
……
public Object instantiateItem(ViewGroup container, int position) {
if(this.mCurTransaction == null) {
this.mCurTransaction = this.mFragmentManager.beginTransaction();
}
long itemId = this.getItemId(position);
String name = makeFragmentName(container.getId(), itemId);
Fragment fragment = this.mFragmentManager.findFragmentByTag(name);
if(fragment != null) {
this.mCurTransaction.attach(fragment);
} else {
fragment = this.getItem(position);
this.mCurTransaction.add(container.getId(), fragment, makeFragmentName(container.getId(), itemId));
}
if(fragment != this.mCurrentPrimaryItem) {
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
}
return fragment;
}
public void destroyItem(ViewGroup container, int position, Object object) {
if(this.mCurTransaction == null) {
this.mCurTransaction = this.mFragmentManager.beginTransaction();
}
this.mCurTransaction.detach((Fragment)object);
}
public void setPrimaryItem(ViewGroup container, int position, Object object) {
Fragment fragment = (Fragment)object;
if(fragment != this.mCurrentPrimaryItem) {
if(this.mCurrentPrimaryItem != null) {
this.mCurrentPrimaryItem.setMenuVisibility(false);
this.mCurrentPrimaryItem.setUserVisibleHint(false);
}
if(fragment != null) {
fragment.setMenuVisibility(true);
fragment.setUserVisibleHint(true);
}
this.mCurrentPrimaryItem = fragment;
}
}
}
uj5u.com熱心網友回復:
只有FragmentTransaction的show()和hide()方法才會呼叫onHiddenChanged()方法uj5u.com熱心網友回復:
getUserVisibleHint獲得當前是否可見uj5u.com熱心網友回復:
的確如此,但為什么呢,什么情況下onHidenchanged有效呢轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/201777.html
標籤:Android
上一篇:軟體測驗
