我使用的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);
}
}
答案 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) {
}
};