1

Я пытаюсь загрузить данные с сервера во Фрагмент с помощью AsyncTask и ProgressDialog. Вот код PageAdapterAsyncTask с фрагментом в ViewPager

public class TabPagerAdapter extends FragmentPagerAdapter { 
    public TabPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 
    @Override 
    public Fragment getItem(int i) { 
     switch (i){ 
      case 0: return new Fragment1(); 
      case 1: return new Fragment2(); 
      case 2: return new Fragment3(); 
     } 
     return null; 
    } 
    @Override 
    public int getCount() { 
     return 3; 
    } 
} 

Вот как я использую адаптер

viewPager = (ViewPager) findViewById(R.id.pager); 
     actionBar = getActionBar(); 
     mAdapter = new TabPagerAdapter(getSupportFragmentManager()); 

     viewPager.setAdapter(mAdapter); 

И код во фрагменте

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    appContext= (SApplication) getActivity().getApplicationContext(); 
    mList.clear(); 
    this.rootView = inflater.inflate(R.layout.fragment_event, container, false); 
    mListView = (ListView)rootView.findViewById(R.id.events); 
    this.asycnTask=new HttpRequestTask(getActivity()); 
    return rootView; 
} 
@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if (isVisibleToUser) { 
     if(asycnTask.getStatus().equals(AsyncTask.Status.PENDING)) { 
      this.asycnTask.execute(); 
     } 
    } 
} 

Проблема я столкнулся в том, что AsyncTask выполняется каждый раз, когда я сажусь на фрагмент 3. Мне нужно только, чтобы AsyncTask выполнялся один раз.

ответ

0

Можете ли вы установить флаг, который блокирует последующие прогоны?

private boolean wasAlreadyRunOnce; 
. 
. 
. 

    if (isVisibleToUser && !wasAlreadyRunOnce) { 
      if(asycnTask.getStatus().equals(AsyncTask.Status.PENDING)) { 
       this.asycnTask.execute(); 
       wasAlreadyRunOnce = true; 
      } 
    } 
Смежные вопросы