尝试自动刷新当前页面视图时从ViewPager获取下一页面视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试自动刷新当前页面视图时从ViewPager获取下一页面视图相关的知识,希望对你有一定的参考价值。

我正在使用ViewPager,其中包含含有FragmentRecyclerView。在那里,我试图每10秒自动刷新当前(可见的)页面视图。但问题是在10秒后handler.postDelayed()正在更新下一页视图的视图(不可见)。我知道这是因为pager加载1个额外的页面,这导致holder更新下一个viewhandler.postDelayed()正在更新view下一个holder

如何解决这个问题呢。

这是我的autorefresh方法,我从onBindViewHolder()调用它;

private void startAutoRefresh(final ViewHolder holder, final String exchange,
            final int currentPosition, final int timer){
        new FetchData(holder, exchange, firstTimeLoadPosition).execute(
                Configuration.exchangesAPI.get(exchange));
        if (MainActivity.pagerPosition == currentPosition) {
            counterView.setText(timer + "");
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (timer > 0) {
                        counterView.setText(timer + "");
                        startAutoRefresh(holder, exchange, currentPosition, timer - 1);
                    } else {
                        Log.wtf("Reloading", currentPosition+"");
                        new FetchData(holder, exchange, currentPosition).execute(
                                Configuration.exchangesAPI.get(exchange));
                        startAutoRefresh(holder, exchange, MainActivity.pagerPosition, counter);
                    }
                }
            }, 1000);
        }
    }
答案

使用一个接口并将该接口作为适配器的参数传递...在接口interface GetPositionFromMainActivity extends Parcelable{int getPosition();}和MainActivity中设置适配器的视图纸GetPositionFromMainActivity getpos = new GetPositionFromMainActivity { @override getpos{ return viewpager.getPosition()}和在recycler适配器if(interface.getPos == currentPosition)而不是静态变量..我的意思是只使用一个接口而不是一个静态变量...将接口传递给viewpager的适配器..并且在viewPagerAdapter的getItem中将接口作为putParcelable传递为bundle参数..获取片段的参数并将接口传递给recycleler适配器...

另一答案

你可以使用onPageSelectedViewPager.OnPageChangeListenr方法。例如,

ViewPager.OnPageChangeListener mPageChangeListener = new ViewPager.OnPageChangeListener() {

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

    }

    @Override
    public void onPageSelected(final int position) {

        // It returns the position of currently visible page.
        // Write your code here, according to your slide position using switch or if else.
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
};

以上是关于尝试自动刷新当前页面视图时从ViewPager获取下一页面视图的主要内容,如果未能解决你的问题,请参考以下文章

需要帮助来修复在 viewpager 中获取当前视图的代码

无法从 ViewPager 中的另一个片段刷新/更新片段中的列表视图

Excel 用户在从视图中刷新数据时从 SQL Server 收到转换错误

Android:Viewpager 和 FragmentStatePageAdapter

如何在使用 UIpageviewcontroller 导航页面时从另一个视图控制器自动更新视图控制器上的标签

单击按钮时刷新片段视图