2012-06-11 4 views
0

ViewPagerIndicator에 의해 부풀려진 레이아웃에 문제가 있으며 실행 가능한 프로세스 내에서 처리 중입니다. 항상 그런 것은 아니지만 이미 몇 번이나 일어났습니다.Android : 프로세스가 완료되어 다른 프로세스가 시작되었는지 확인

MainActivity.java refreshPages에

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(); 

    } 

() 메소드, 내가 ViewPagerIndicator에 의해 팽창 전망을 일부 참조를 만드는 것이,의 Runnable을 가지고, 이것은 일반적으로 작동하지만 가끔 (~ 20 일 - 1 오류) I 해당 참조에서 일부 NullPointerException 오류가 발생합니다.

일부 로깅 태그를 코드에 넣었습니다. 오류가 발생하면 inflate 프로세스가 시작되기 전에 refreshPages 메서드가 발생했습니다. 왜 이런 일이 생길까요? 어떻게 inflate 프로세스가 완료된 후에 만 ​​refreshPages 메소드를 시작할 수 있습니까? 이 있거나의 Runnable를 구현

refreshPages 때문에 감사

+0

'refreshPages'에 문제가 있다면, 왜 그 코드를 보여주지 않습니까? – dacwe

답변

0

@Daniel, 그것은을위한 코드는 다른 스레드에서 실행됩니다. 스레드가 실행될 때 제어 할 권한이 없습니다. 그것은 단지합니다. 이것은 때때로 코드가 작동하지 않는 이유입니다. 한 가지 빠른 방법은 공유 플래그 (스레드 간)를 사용하여 스레드를 동기화하거나 세마포어를 사용하여보다 올바른 방법으로 동기화하는 것입니다. 지금은 동기화하는 방법을 이해할 때까지 플래그를 사용하여 실험 해보십시오. 알다?

이전에 제안한대로 검토를 위해 refreshPages() 코드를 제공 할 수 있습니다.

관련 문제