Jak załadować dane fragmentu tylko wtedy, gdy jego karta zostanie kliknięta w PagerSlidingTabStrip

ja używamPagerSlidingTabStrip w moim projekcie i pokazuję dane we fragmentach. To świetna biblioteka, która działa świetnie. Każdy fragment składa się z wykładów uczonego, które są ładowane z serwisu internetowego. Kod dostępu do usługi internetowej jest dostępnyonCreateView metoda Fragmentu. Obecnie wszystkie dane fragmentu są ładowane w tym samym czasie, w którym są dodawaneViewPager. Zastanawiałem się, czy istnieje sposób na załadowanie danych Fragmentu tylko wtedy, gdy użytkownik kliknie / przerzuci na określoną kartę. Nie wszystko na raz.

Obecny kod jest dość standardowy, skorzystałem z podanego przykładu [rozwiązanie dla Androida].1

Adapter pagera wygląda następująco:

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

}

Zwraca DWA fragmenty, informacje i wykłady. Fragmenty wykładów wywołują serwis internetowy, aby uzyskać wykłady uczonego.

Kod aktywności to:

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

Próbowałem dodać_tabs.setOnPageChangeListener(this); i skończyło się naonPageSelected(int arg0) w mojej działalności również. Myślałem, że teraz będzie łatwo. Potem zmodyfikowałempublic Fragment getItem(int arg0) wScholarDetailPagerAdapter powyżej i wróciłnull zamiast zwracać dwa fragmenty. Ale to wywołało wyjątek. Pomyślałem, że spowoduje to wyświetlenie pustych widoków w pagerach ... ale oczywiście się myliłem.

Aby upewnić się, że Fragment ładuje dane po kliknięciu odpowiedniej zakładki i jest widoczny, próbowałem także przesłonić następujące zdarzenia i napisałem w nich wywołanie ładowania danych:

onResume() Nie zadziałało. Nadal ładuje dane po dodaniu do aktywności

Próbowałem nadpisać onHiddenChanged

@Override   
public void onHiddenChanged(boolean hidden) {

    super.onHiddenChanged(hidden);

    if(!hidden){
        loadLectures();
    }

}

To też nie zadziałało. Żadne dane nie zostały załadowane, jakby to zdarzenie nie zostało w ogóle uruchomione.

Jak mogę to zrobić? Chcę po prostu załadować fragment, gdy użytkownik kliknie kartę.

Z góry dziękuję

questionAnswers(2)

yourAnswerToTheQuestion