[英]onResume() is not working properly in Fragments?
I am working on Fragments,so here I have three fragments in My view pager我正在处理 Fragments,所以这里我的视图寻呼机中有三个 Fragment
So here I am using onResume()
method in my first fragment, so when I swipe from one fragment to another and I came back to first fragment My onResume
Method is not working所以在这里我在我的第一个片段中使用
onResume()
方法,所以当我从一个片段滑动到另一个片段时我又回到第一个片段我的onResume
方法不起作用
So any one give the solutions guys所以任何人都可以给出解决方案
The fragment's
onResume()
or onPause()
will be called only when the Activities
onResume()
or onPause()
is called.只有当
Activities
onResume()
或onPause()
被调用时, fragment's
onResume()
或onPause()
才会被调用。 They are tightly coupled to the Activity
.它们与
Activity
紧密耦合。 Check this and this .检查这个和这个。
Also it may get called few times when you are on fragment
screen.当您在
fragment
屏幕上时,它也可能会被调用几次。 In your case since your viewpager
is inside Activity
, fragment onResume()
may not get called when you swipe to that fragment
.在您的情况下,由于您的
viewpager
位于Activity
,因此当您滑动到该fragment
时,可能不会调用fragment onResume()
。
This is due to the way ViewPager
keeps Fragment
s in memory.这是由于
ViewPager
将Fragment
保存在内存中的方式。 If the Fragment
is scrolled more than the offscreen page limit (set via .setOffscreenPageLimit()
), it should be removed from memory and reinstantiated when it's reloaded (which, IIRC, may not be guaranteed to be when it comes back onscreen).如果
Fragment
滚动超过屏幕外页面限制(通过.setOffscreenPageLimit()
设置),则应将其从内存中删除并在重新加载时重新实例化(IIRC,当它返回屏幕时可能无法保证)。
To run fragment-specific code when a page is selected, you can try something like the following:要在选择页面时运行特定于片段的代码,您可以尝试以下操作:
mPager.setOnPageChangeListener(new SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
final MyFragment fragment = mAdapter.getFragment(position);
fragment.myMethod();
}
}
I faced this problem myself.我自己也遇到过这个问题。
Add a tabListener
to your viewpager first.首先将
tabListener
添加到您的 viewpager。 In the onTabSelected
method, create an instance of your selected fragment and call onResume()
.在
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) {
}
};
Here, mContent
is the currently selected fragment, and mAdapter
is the viewpager's adapter.这里,
mContent
是当前选择的片段, mAdapter
是 viewpager 的适配器。
In fragment (with ViewPager) use setUserVisibleHint(boolean isVisibileToUser) instead onResume():在片段中(使用 ViewPager)使用 setUserVisibleHint(boolean isVisibileToUser) 代替 onResume():
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser) {
refresh();
} else {
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.