2012-03-19 10 views
1

私はASyncTask内でいくつかのデータを取得しようとしていますが、完了したらそのデータをビューページ内のフラグメントに渡します。しかし、次の例外が発生します。AsyncTask内でViewPagerを設定する

java.lang.IllegalStateException:ViewPagerがバインドされていません。

Iは、次のコードを持っている:私はOnCreateViewする "OnPostExecute(ボイド結果)" の内容を移動する

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

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それは動作します...しかし、フラグメントが作成される前にすべてのデータを取得する必要があります。

どうしたらいいのでしょうか教えてください。 !:(

答えて

8

がFIXED私は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

回答ありがとうございますが、なぜonCreateでUIを設定できないのですか? onPostExecute()でアダプテーションを作成する... なぜ、onPostExecuteで完全なレイアウトを設定するのですか? (それは本当の質問だった):)あなたの答えを楽しみにして – cV2

関連する問題