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

时间:2018-01-01 07:44:42

标签: android android-fragments android-viewpager

我使用的ViewPager包含Fragment,其中包含RecyclerView。在那里,我试图每10秒自动刷新当前(可见的)页面视图。但问题是10秒后handler.postDelayed()正在更新下一页视图的视图(不是可见的)。我知道这是因为pager加载了1个额外页面,这导致holder更新了下一个view,而handler.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);
        }
    }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以使用onPageSelected ViewPager.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) {

    }
};