我遇到了由ViewPagerIndicator和runnable中的进程夸大的布局问题。 事情并非总是如此,但已经发生了几次。
MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mAdapter = new GtAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setOffscreenPageLimit(5);
mPager.setAdapter(mAdapter);
mIndicator = (TabPageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
mIndicator.setCurrentItem(1);
mIndicator.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageSelected(int position) {
}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
public void onPageScrollStateChanged(int state) {
}
});
int cod = mAdapter.getItemPosition(0);
refreshPages();
}
在refreshPages()方法中,我有一个Runnable,它对ViewPagerIndicator膨胀的视图进行一些引用,这通常有效,但有时候(~20个工作 - 1个错误)我在引用中得到一些NullPointerException错误。
我在代码中放了一些日志标记,发现当错误发生时,refreshPages方法在启动膨胀过程之前发生。为什么会这样? 如何在膨胀过程完成后才启动refreshPages方法?感谢
答案 0 :(得分:0)
@Daniel,
由于refreshPages具有或实现了Runnable,因此它的代码在不同的线程上运行。在线程执行时你没有控制权。它只是。这就是为什么有时你的代码不起作用的原因。一种快速方法是使用共享标志(线程之间)或使用信号量的更正确方式同步线程。现在,只需尝试使用标志,直到您了解如何同步。理解?
如前所述,您可以提供refreshPages()的代码供审阅。