android - 如何获取 ViewPager 当前 View ,这是在 onPageSelected 中向用户显示的 View

标签 android android-viewpager android-pageradapter

我用这种方式获取ViewPager的当前View:

private class OuterAdapter extends PagerAdapter{

    private SwipingVideoPage currentPage;

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        SwipingVideoPage page = new SwipingVideoPage();
        container.addView(page);
        return page;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View)object);
    }

    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        currentPage = (SwipingVideoPage)object;
        super.setPrimaryItem(container, position, object);
    }

    public SwipingVideoPage getCurrenPage() {
        return currentPage;
    }
}

我想我可以调用 ViewPager.getAdapter.getCurrentPage() 来获取当前 View 。但我发现它在 ViewPager.OnPageChangeListener.onPageSelected() 中不起作用:

private class OuterChangeListener implements ViewPager.OnPageChangeListener {

    @Override
    public void onPageSelected(int position) {
        ((OuterAdapter)outerViewPager.getAdapter()).getCurrenPage()  //this returns the previous shown view, not the right one
    }
}

也许 onPageSelected()setPrimaryItem() 之前被调用,这是正确的吗?

以及如何在onPageSelected() 中获取ViewPage 的主视图?

最佳答案

正如@Mohammad Fareed所说,我没有在ViewPager中找到直接获取当前页面的方法。

所以我用这种方式来解决问题:

private Map<Integer, View> pageMap;     //records all the pages in the ViewPager
private SwipingVideoPage currentPage;

private class OuterAdapter extends PagerAdapter{

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        SwipingVideoPage page = new SwipingVideoPage();
        container.addView(page);
        pageMap.put(position, page);    //add page
        return page;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View)object);
        pageMap.remove(position);      //remove page which is removed from ViewPager
    }
}

private class OuterChangeListener extends ViewPager.SimpleOnPageChangeListener {

    @Override
    public void onPageSelected(int position) {
        currentPage = pageMap.get(position);    //get current page
    }
}

我在我的项目中使用了这些代码,到目前为止效果很好。

关于android - 如何获取 ViewPager 当前 View ,这是在 onPageSelected 中向用户显示的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36639055/

相关文章:

java - 使用 OpenVPN 创建 VPN

java - 更改 ViewPager v4 中的背景选项卡

android - 如何在ViewPager中实现可缩放的ImageView?

Android ViewPager 类似 instagram 照片 Activity

android - 为什么 getCount 在 PagerAdapter 中被调用了那么多次?

android - 添加另一个项目后应用程序崩溃 - cwac-pager

java - 如何以编程方式显示表情符号键盘 android?

android - 如何像whatsapp一样选择位置?

android - 当设备连接到 Internet 时向服务器发送数据

android - 带有 viewpager 和底部按钮的折叠工具栏