user1255553
user1255553

Reputation: 960

Set op ViewPager inside ASyncTask

I'm trying to get some data within a ASyncTask and once it completes pass that data to any fragments inside a viewpager. But I get the following exception:

java.lang.IllegalStateException: ViewPager has not been bound.

I have to following code:

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

When I move the contents of "OnPostExecute(Void result)" to OnCreateView it works... But I have to get all the data before the fragments are created.

Could you tell me what's going wrong? :(

Upvotes: 1

Views: 4022

Answers (1)

user1255553
user1255553

Reputation: 960

FIXED! I had to move all the layout-stuff to the OnPostExecute from ASyncTask. It looks like this:

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

Upvotes: 8

Related Questions