Como carregar dados de fragmento somente quando sua guia é clicada em PagerSlidingTabStrip
estou usandoPagerSlidingTabStrip
no meu projeto e estou mostrando dados em fragmentos. É uma ótima biblioteca que funciona muito bem. Cada fragmento consiste em palestras de um acadêmico que são carregados de um serviço da web. O código para acessar o serviço da Web está emonCreateView
método do fragmento. Atualmente, todos os dados do fragmento são carregados ao mesmo tempo em que são adicionadosViewPager
. Eu queria saber se existe alguma maneira de carregar os dados do fragmento somente quando um usuário clica / desliza para uma guia específica. Não tudo de cada vez.
Código atual é bastante normal, tomei ajuda do exemplo fornecido [solução android].1
O adaptador de pager é o seguinte:
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;
}
}
Retorna dois fragmentos, informações e palestras. O fragmento de palestras chama um serviço da web para obter as palestras de um acadêmico.
O código de atividade é:
@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);
}
Tentei adicionar_tabs.setOnPageChangeListener(this);
e acabou tendoonPageSelected(int arg0)
na minha atividade também. Eu pensei que seria fácil agora. Então eu modifiqueipublic Fragment getItem(int arg0)
emScholarDetailPagerAdapter
acima e retornounull
em vez de retornar dois fragmentos. Mas isso levantou uma exceção. Eu pensei que iria renderizar vistas vazias no pager .. mas é claro que eu estava errado.
Para garantir que o Fragment carregue dados quando sua respectiva guia for clicada e esteja visível, também tentei substituir seus eventos a seguir e escrevi a chamada de carregamento de dados neles:
onResume()
Não funcionou. Ainda carrega dados quando adicionados em atividade
Tentei substituir onHiddenChanged
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if(!hidden){
loadLectures();
}
}
Isso não funcionou também. Nenhum dado carregado como se este evento não fosse acionado de todo.
Como faço isso? Eu simplesmente quero carregar um fragmento quando o usuário clica em uma guia.
desde já, obrigado