TabLayout+ViewPager+Fragment, 为什么Fragment不走onHiddenChanged方法 TabLayout+ViewPager+Fragment, 为什么Fragment不走onHiddenChanged方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为Fragment都是被销毁后新建的,不是原来的 先设置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; } }} 只有FragmentTransaction的show()和hide()方法才会调用onHiddenChanged()方法 getUserVisibleHint获得当前是否可见 android 序列化 class not found 请问怎样判断程序运行在模拟器还是真机上? java中,按要求输出以下数字,在线等 APK覆盖安装后,配置及数据库无法读取是什么原因? 用新的布局覆盖在窗口标题栏上 为什么我的R文件不随着我xml文件的加入进行更新? 三星7562刷新后无法启动,大家看看如何处理 android程序按下home键后,再回到应用就崩掉了,求解 Android语音用speex编解码边录边放,求大神解决参数问题 win10 安装Android studio 一直报错 求助大佬 droidplugin插件化开发,卡在“努力加载中”怎么办? 安卓报错
……
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;
}
}
}