Android 调用ViewPager转换到下一个窗格?

Android 调用ViewPager转换到下一个窗格?,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,当用户从一个窗格滑动到下一个窗格时,我是否可以调用回调?正如我的实验所揭示的,当前(主要)窗格/片段以及相邻的两个(左侧和右侧)都是“恢复的”,因此没有调用任何常规片段生命周期回调。我对此感兴趣是为了在与之关联的窗格离开后立即隐藏MediaController。您可以将OnPageChangeListener附加到您的ViewPager,以便在用户滑动到新页面时获取更新: viewPager.setOnPageChangeListener(new OnPageChangeListener() {

当用户从一个窗格滑动到下一个窗格时,我是否可以调用回调?正如我的实验所揭示的,当前(主要)窗格/片段以及相邻的两个(左侧和右侧)都是“恢复的”,因此没有调用任何常规片段生命周期回调。我对此感兴趣是为了在与之关联的窗格离开后立即隐藏MediaController。

您可以将
OnPageChangeListener
附加到您的ViewPager,以便在用户滑动到新页面时获取更新:

viewPager.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageScrollStateChanged(int state) 
    {

    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 
    {

    }

    @Override
    public void onPageSelected(int position) 
    {                       
        Log.d("MainActivity", "New position = " + position);    
    }
});

如果您使用
FragmentPagerAdapter
,您的ViewPager页面将缓存在内存中。如果使用的是
FragmentStatePagerAdapter
,则不会缓存它们。

只要片段完全消失或出现,就会回调片段的
setUserVisibleHint()
,隐藏或显示MediaController操作可以在此处完成

public class YourFragment extend android.support.v4.app.Fragment {
    ...
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            System.out.println("VISIBLE");
        } else {
            System.out.println("GONE");
        }
    }
    ...
}

诚然,这是我一直在寻找的,但现在我发现了另一个问题:我在前面的活动中从列表视图打开ViewPager。如果将MediaController的窗格从相邻窗格滑动到,则会显示该窗格。但是,如果使用MediaController将ViewPager直接打开到窗格,则它不会出现,即使在某个时候,我直接打开到该窗格时,OnPageChange()方法也会出错。如果不清楚,则通过OnPageChange()方法连接MediaController。有什么想法吗?我不能从描述中确切地说出问题出在哪里。如果你发布了一个新问题,其中包含一些代码片段和对所遇到的任何错误的描述,可能会更好。最后,我找到了解决问题的另一种方法。谢谢你的帮助。很高兴你找到了答案。祝你一切顺利。