onResume()在Fragments中无法正常工作?

时间:2015-04-10 15:18:33

标签: java android

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

所以我在我的第一个片段中使用onResume()方法,所以当我从一个片段滑动到另一个片段时,我回到第一个片段我的onResume方法无法正常工作

所以任何人都要给解决方案人员

4 个答案:

答案 0 :(得分:1)

仅在调用fragment's onResume()onPause()时才会调用Activities onResume()onPause()。它们与Activity紧密耦合。查看thisthis

当您在fragment屏幕上时,它可能会被调用几次。在您的情况下,viewpager位于Activity内,当您向fragment onResume()方向滑动时,可能无法调用fragment

答案 1 :(得分:1)

这是由于ViewPagerFragment保留在内存中的方式。如果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 {

    }
}