
Jake Wharton desenvolveu uma framework para criar de forma eficaz e eficiente vários tipos de navegação via Tabs nas aplicações Android. Citei esse framework, chamado,ViewPagerIndicator, em um post anterior e o repositório está localizado em https://github.com/JakeWharton/Android-ViewPagerIndicator/. Segue um exemplo onde usei a classe TitlePageIndicator, uma das classes do framework, para criar minhas Tabs.
<LinearLayout | |
xmlns:android="http://schemas.android.com/apk/res/android" | |
android:orientation="vertical" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent"> | |
<com.viewpagerindicator.TitlePageIndicator | |
android:id="@+id/indicator" | |
android:padding="10dip" | |
android:layout_height="wrap_content" | |
android:layout_width="match_parent" | |
/> | |
<android.support.v4.view.ViewPager | |
android:id="@+id/pager" | |
android:layout_width="match_parent" | |
android:layout_height="0dp" | |
android:layout_weight="1"/> | |
</LinearLayout> |
ViewPager viewPager = (ViewPager) findViewById(R.id.pager); | |
TitlePageIndicator titleIndicator = (TitlePageIndicator)findViewById(R.id.indicator); | |
viewPager.setAdapter(new SeuViewPagerAdapter()); | |
viewPager.setCurrentItem(getIntent().getIntExtra(VIEWPAGER_LAST_POSITION, 0)); | |
titleIndicator.setViewPager(viewPager); |
Geralmente é preciso criar listener para o ViewPager e listener para as Tabs para que quando aconteça algo em um, reflita imediamente no outro. Sob esse aspecto há um ponto positivo. Quando ligamos o TitlePagerIndicator com o ViewPager através do método setViewPager(), isso já ocorre imediatamente.
Uma pergunta que fiz foi, “Como insiro os títulos nas abas?”. Não demorei a encontrar uma resposta no Google, o que demonstra que tem a tal biblioteca tem sido bem utilizada. O TitlePageIndicator vai exibir em cada Tab o título do Fragment correspondente no ViewPager. Então, em nosso adapter do ViewPager devemos sobrescrever o método getPageTitle() e informar lá o título de cada fragmento e que será capturado e exibido na Tab pelo TitlePageIndicator.
public class SeuViewPagerAdapter extends FragmentPagerAdapter { | |
//Outros métodos | |
@Override | |
public CharSequence getPageTitle(int position) { | |
return "Titulo do fragmento de posição = position"; | |
} | |
} |