我正在处理片段,所以这里我在我的视图寻呼机中有三个片段
所以我在我的第一个片段中使用onResume()
方法,所以当我从一个片段滑动到另一个片段时,我回到第一个片段我的onResume
方法无法正常工作
所以任何人都要给解决方案人员
答案 0 :(得分:1)
仅在调用fragment's
onResume()
或onPause()
时才会调用Activities
onResume()
或onPause()
。它们与Activity
紧密耦合。查看this和this。
当您在fragment
屏幕上时,它可能会被调用几次。在您的情况下,viewpager
位于Activity
内,当您向fragment onResume()
方向滑动时,可能无法调用fragment
。
答案 1 :(得分:1)
这是由于ViewPager
将Fragment
保留在内存中的方式。如果Fragment
滚动超过屏幕外页面限制(通过.setOffscreenPageLimit()
设置),则应将其从内存中删除并在重新加载时进行重新安装(IIRC,可能无法保证当它重新加载时)回到屏幕上。)
要在选择页面时运行特定于片段的代码,您可以尝试以下内容:
mPager.setOnPageChangeListener(new SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
final MyFragment fragment = mAdapter.getFragment(position);
fragment.myMethod();
}
}
答案 2 :(得分:0)
我自己也遇到过这个问题。
首先向您的viewpager添加tabListener
。
在onTabSelected
方法中,创建所选片段的实例并调用onResume()
。
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
mContent.setUserVisibleHint(false);
mContent.onPause();
mContent = mAdapter.getItem(tab.getPosition());
mContent.setUserVisibleHint(true);
mContent.onResume();
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
};
此处,mContent
是当前选定的片段,mAdapter
是viewpager的适配器。
答案 3 :(得分:0)
在片段中(使用ViewPager),使用setUserVisibleHint(boolean isVisibileToUser)代替onResume():
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
refresh();
} else {
}
}