Как загрузить фрагмент данных только тогда, когда его вкладка нажата в PagerSlidingTabStrip
Я используюPagerSlidingTabStrip
в моем проекте и я показываю данные в фрагментах. Это отличная библиотека, которая прекрасно работает. Каждый фрагмент состоит из лекций ученого, которые загружаются из веб-службы. Код для доступа к веб-сервису находится вonCreateView
Метод Фрагмента. В настоящее время все данные фрагмента загружаются одновременно, когда они добавляются вViewPager
, Мне было интересно, если есть какой-либо способ загрузки данных фрагмента, только когда пользователь нажимает / проводит по определенной вкладке. Не все одновременно.
Текущий код довольно стандартный, я воспользовался помощью предоставленного примера [решение для Android].1
Адаптер пейджера выглядит следующим образом:
public class ScholarDetailPagerAdapter extends FragmentPagerAdapter {
private final String[] TITLES = { "Scholar Info", "Lectures"};
Scholar _scholar;
public ScholarDetailPagerAdapter(FragmentManager fm, Scholar scholar) {
super(fm);
_scholar = scholar;
}
@Override
public CharSequence getPageTitle(int position) {
return TITLES[position];
}
@Override
public Fragment getItem(int arg0) {
if(arg0 == 0)
return ScholarsInfoFragment.netInstance(_scholar.Name, _scholar.Information, _scholar.ThumbnailUrl);
else
return ScholarLecturesFragment.newInstance(_scholar.ScholarId);
}
@Override
public int getCount() {
return TITLES.length;
}
}
Он возвращает два фрагмента, информацию и лекции. Фрагмент лекций вызывает веб-сервис, чтобы получить лекции ученого.
Код активности:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set the Above View
setContentView(R.layout.tabbed_view);
Scholar scholar = getScholar(getIntent());
_tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
_pager = (ViewPager) findViewById(R.id.pager);
_adapter = new ScholarDetailPagerAdapter(getSupportFragmentManager(), scholar);
_pager.setAdapter(_adapter);
final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
.getDisplayMetrics());
_pager.setPageMargin(pageMargin);
_tabs.setViewPager(_pager);
}
Я пытался добавить_tabs.setOnPageChangeListener(this);
и в конечном итогеonPageSelected(int arg0)
и в моей деятельности. Я думал, что сейчас будет легко. Потом я модифицировалpublic Fragment getItem(int arg0)
вScholarDetailPagerAdapter
выше и вернулсяnull
вместо возврата двух фрагментов. Но это вызвало исключение. Я думал, что в пейджере будут пустые представления ... но, конечно, я ошибался
Чтобы удостовериться, что Fragment загружает данные, когда соответствующая вкладка нажата и видна, я также попытался переопределить следующие события и записал в них вызов загрузки данных:
onResume()
Не сработало. По-прежнему загружает данные при добавлении в активность
Попытка переопределения на скрытый измененный
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if(!hidden){
loadLectures();
}
}
Это тоже не сработало. Данные не загружены, как будто это событие вообще не запускается.
Как мне это сделать? Я просто хочу загрузить фрагмент, когда пользователь нажимает на вкладку.
заранее спасибо