首页 文章

加载第一个Fragment后,ViewPager调用setUserVisibleHint

提问于
浏览
38

在我的应用程序中,我有一个ViewPager,其中包含许多带有Fragments的可滑动Tabs . 我使用 setUserVisibleHint 方法来检测 Fragment 何时进入屏幕 . 当用户在选项卡之间滑动但在第一次加载时它不起作用时,这非常有效 . 要在方法中运行代码,我必须向左滑动然后再回到第一个 Fragment ,因为在 onCreateView 方法之前调用 setUserVisibleHint 方法 .

你知道如何在第一个片段可见后运行此代码吗? ViewPager 中还有其他方法吗?

6 回答

  • 3

    你可以't (and shouldn' t)依靠 setUserVisibleHint 为此 . 相反,您应该使用ViewPager.OnPageChangeListener来获取页面变得可见时的回调 . 例如 .

    viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            // do your work
        } 
    });
    

    注意:如果您不需要监听所有回调,则可以使用 ViewPager.SimpleOnPageChangeListener .

    更新

    现在不推荐使用 setOnPageChangeListener 方法,而是使用 addOnPageChangeListener

    viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            // do your work
        } 
    });
    
  • -5

    BELOW WORKED FOR ME

    请创建这样的全局视图

    View view;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState)
        {
            //inflate view layout
            view =inflater.inflate(R.layout.your_fragment, container, false);
    
            // return view
            return view;
        }
    

    并使用这个

    @Override
            public void setUserVisibleHint(boolean isUserVisible)
            {
                super.setUserVisibleHint(isUserVisible);
               // when fragment visible to user and view is not null then enter here.
                    if (isUserVisible && view != null)
                    {
                       onResume();
                    }
    
            }
    

    和OnResume方法

    @Override
             public void onResume() { 
             super.onResume();   
                if (!getUserVisibleHint()) {
                return;
              }
          //do your stuff here
       }
    
  • 0

    您必须在根活动/片段中的 onCreateView 中手动调用 mViewPagerListener.onPageSelected(0); .

  • 56

    我不明白你需要什么,但你可以通过调用返回整数的 ViewPager.getCurrentItem 来检测当前片段的页面 .

    希望能帮助到你 .

    祝好运 .

  • 4

    好吧,它的解决方法更多,也许更好的设置 OnPageChangeListener ,但它适用于我 . 任务是确定当前片段在创建时是否可见 . 您可以使用菜单执行此操作 . 在你的片段中:

    @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true); // set current fragment has its own options menu
        }
    

    还有这个

    @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         ...
    
                if(isMenuVisible()) { // menu should be visible if current fragment is visible right now
                    setUserVisibleHint(true); // manually set value to true
                }
         ...
        return view;
    

    也许有人会发现它很有用 . 这适合我 .

  • 0

    我检查你的问题,但我发现在 setUserVisibleHint 方法之前调用 onCreateView 方法

    enter code here
    

    因为在onCreateView方法之前调用了setUserVisibleHint方法

相关问题