0

我在由 ViewPagerIndicator 膨胀的布局和可运行的进程中遇到问题。这种情况并不总是发生,但已经发生过几次。

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方法发生在inflate进程启动之前。为什么会这样?如何使 refreshPages 方法仅在充气过程完成后才启动?谢谢

4

1 回答 1

0

@丹尼尔,

由于 refreshPages 具有或实现了 Runnable,因此它的代码在不同的线程上运行。您无法控制线程何时执行;它就是这样。这就是为什么有时您的代码不起作用的原因。一种快速的方法是使用共享标志(在线程之间)或更正确的方式使用信号量来同步线程。现在,只需尝试使用标志,直到您了解如何同步为止。理解?

如前所述,您可以提供 refreshPages() 的代码以供查看。

于 2012-06-11T19:59:41.770 回答