Установите оп ViewPager внутри ASyncTask - PullRequest
1 голос
/ 19 марта 2012

Я пытаюсь получить некоторые данные в 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 (Void result)» в OnCreateView, оно работает ... Но мне нужно получить все данные до создания фрагментов.

Не могли бы вы сказать мне, что происходит не так? (

1 Ответ

8 голосов
/ 21 марта 2012

ИСПРАВЛЕНО!Мне пришлось перенести весь материал макета на OnPostExecute из ASyncTask.Это выглядит так:

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