繁体   English   中英

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

[英]onResume() is not working properly in Fragments?

我正在处理 Fragments,所以这里我的视图寻呼机中有三个 Fragment

所以在这里我在我的第一个片段中使用onResume()方法,所以当我从一个片段滑动到另一个片段时我又回到第一个片段我的onResume方法不起作用

所以任何人都可以给出解决方案

只有当Activities onResume()onPause()被调用时, fragment's onResume()onPause()才会被调用。 它们与Activity紧密耦合。 检查这个这个

当您在fragment屏幕上时,它也可能会被调用几次。 在您的情况下,由于您的viewpager位于Activity ,因此当您滑动到该fragment时,可能不会调用fragment onResume()

这是由于ViewPagerFragment保存在内存中的方式。 如果Fragment滚动超过屏幕外页面限制(通过.setOffscreenPageLimit()设置),则应将其从内存中删除并在重新加载时重新实例化(IIRC,当它返回屏幕时可能无法保证)。

要在选择页面时运行特定于片段的代码,您可以尝试以下操作:

mPager.setOnPageChangeListener(new SimpleOnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        final MyFragment fragment = mAdapter.getFragment(position);
        fragment.myMethod();
    }
}

我自己也遇到过这个问题。

首先将tabListener添加到您的 viewpager。 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 的适配器。

在片段中(使用 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