2012-06-11 70 views
0

我遇到了ViewPagerIndicator膨脹的佈局和runnable內的進程問題。 這並不總是如此,但已經發生過幾次。Android:檢查過程是否已完成啓動其他

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

如果你有'refreshPages'問題,爲什麼不顯示該代碼? – dacwe

回答

0

@Daniel,

由於refreshPages具有或實現一個Runnable,它的代碼上不同的線程中運行。當線程執行時你沒有控制權;它只是。這就是爲什麼有時你的代碼無法工作的原因。一個簡單的方法是使用共享標誌(線程之間)或使用信號量更正確的方式來同步線程。現在,只需使用標誌進行實驗,直到您瞭解如何進行同步。理解?

如前所述,您可能會提供refreshPages()代碼以供審閱。