2012-03-19 2 views
1

ASyncTask 내에서 일부 데이터를 가져 오려고 시도하고 완료되면 해당 데이터를 뷰 페이지 내부의 조각으로 전달합니다. 하지만 다음과 같은 예외가 발생합니다 :AsyncTask 내부에 ViewPager를 설정하십시오.

java.lang.IllegalStateException : ViewPager 바인딩되지 않았습니다.

OnCreateView 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     setContentView(R.layout.simple_tabs);  
     team_id = this.getIntent().getIntExtra("index", 0) + 1; 
     new getTeam().execute(); 
    } 

AsyncTask를 :

@Override 
    protected Void doInBackground(Void... arg0) { 
     team = api.getTeamByID(team_id); 
     return null;  
    } 

@Override 
     protected void onPostExecute(Void result) { 
      mAdapter = new TeamFragmentAdapter(getSupportFragmentManager()); 

      mPager = (ViewPager)findViewById(R.id.pager); 
      mPager.setAdapter(mAdapter); 

      mIndicator = (TabPageIndicator)findViewById(R.id.indicator); 
      mIndicator.setViewPager(mPager); 

      progressDialog.dismiss(); 
     } 

TeamFragmentAdapter :

class TeamFragmentAdapter extends FragmentPagerAdapter implements TitleProvider { 

     ArrayList<Fragment> fragments = new ArrayList<Fragment>(); 
     ArrayList<String> titels = new ArrayList<String>(); 

     public TeamFragmentAdapter(FragmentManager fm) { 
      super(fm); 
      fragments.add(new TeamInformatieFragment(team)); 
      titels.add("Informatie");    
      fragments.add(new ContactFragment()); 
      titels.add("Informatie"); 
     } 



     @Override 
     public Fragment getItem(int position) { 
      return fragments.get(position); 
     } 

     @Override 
     public int getCount() { 
      return fragments.size(); 
     } 

     @Override 
     public String getTitle(int position) { 
      return titels.get(position); 
     } 
    } 

내가의 내용을 이동 "OnPostExecute (무효 결과를)"OnCreateView에

나는 다음과 같은 코드가 그것은 작동합니다 ...하지만 조각을 만들기 전에 모든 데이터를 가져와야합니다.

나에게 무엇이 잘못 됐는지 말해 줄 수 있습니까? ! :(

답변

8

가 고정 나는 AsyncTask를에서 OnPostExecute 모든 레이아웃 - 물건을 이동했다 그것은 다음과 같습니다.

@Override 
     protected void onPostExecute(Void result) { 
      setContentView(R.layout.simple_tabs); 

      mAdapter = new TeamFragmentAdapter(getSupportFragmentManager()); 

      mPager = (ViewPager)findViewById(R.id.pager); 
      mPager.setAdapter(mAdapter); 

      mIndicator = (TabPageIndicator)findViewById(R.id.indicator); 
      mIndicator.setViewPager(mPager); 
      invalidateOptionsMenu(); 
      progressDialog.dismiss(); 
     } 
+0

그것을 이해 해달라고하지만 작동하는 것 같다 :?/어떤 설명이 여기에 ? – cV2

+0

@ cV2 예, 레이아웃이 변경되어 UI 스레드에서 실행해야합니다. AsyncTask의 onPostExecute는 UIThread입니다. :) – Reinherd

+0

그래, 응답 해 주셔서 감사합니다.하지만 UI가 onCreate에 설정되지 않는 이유는 무엇입니까? onPostExecute()에서 adaptions 만들기 ... onPostExecute에서 전체 레이아웃을 설정하는 이유는 무엇입니까? (그것은 진짜 질문이었습니다 :) 당신의 대답을 고대했습니다. – cV2

관련 문제