简体   繁体   English

onResume() 在 Fragments 中不能正常工作?

[英]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.这是由于ViewPagerFragment保存在内存中的方式。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM