Resolvi escrever esse post porque toda vez que eu preciso disso tenho que procurar na internet. Não que seja difícil de achar, mas me vi na obrigação moral de fazer :)
Quando utilizamos o ViewPager, normalmente estamos fazendo alguma tela de abas ou algo similar. Nesse caso é recomendado fazer com que cada aba/página seja um Fragment. Mas se não houver nenhuma lógica nessas páginas, criar um fragment pode ser desnecessário.
Posso dar como exemplo aquelas telas de boas-vindas que mostram um breve tutorial de como utilizar a aplicação, onde cada passo é uma página com as instruções. Nesse caso, utilizar um layout (definido em um arquivo de layout) para cada página seria o suficiente, e não precisaríamos de Fragment para tal.
Vamos ver como fazer isso, começando pelo arquivo de layout a seguir.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <com.viewpagerindicator.CirclePageIndicator android:id="@+id/indicator" android:layout_height="wrap_content" android:layout_width="match_parent" android:paddingBottom="10dp" android:paddingTop="10dp" android:background="@color/colorPrimary"/> </LinearLayout>
Esse arquivo possui um ViewPager e um CirclePageIndicator (criado por Jake Wharton) que servirá para exibir um indicador da página atual. Para utiliza-lo, basta adicionar no build.gradle a dependência do componente.
dependencies { ... compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1@aar' }Vejamos agora o código que cria as páginas do ViewPager.
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = (ViewPager)findViewById(R.id.viewpager); viewPager.setAdapter(new ViewSimplesAdapter()); CirclePageIndicator indicator = (CirclePageIndicator)findViewById(R.id.indicator); indicator.setViewPager(viewPager); } private class ViewSimplesAdapter extends PagerAdapter { @Override public int getCount() { return 3; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { int layout; if (position == 0){ layout = R.layout.layout_pagina1; } else if (position == 1){ layout = R.layout.layout_pagina2; } else { layout = R.layout.layout_pagina3; } View view = LayoutInflater.from(container.getContext()) .inflate(layout, container, false); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View)object); } } }A classe ViewSimplesAdapter herda de PagerAdapter e nela, temos o método getCount() que retorna a quantidade páginas que iremos exibir e mais três métodos:
- isViewFromObject() - basicamente determina se uma View está relacionada com o objeto retornado pelo método instantiateItem().
- instantiateItem() carrega o arquivo de layout da página específica. Perceba que a View carregada é adicionada ao ViewGroup recebido como parâmetro e é retornada pelo método.
- destroyItem() vai ser responsável por destruir os itens criados. É importante ressaltar que o ViewPager mantém no máximo três páginas ativas: a que está sendo exibida, a anterior e a posterior.
4br4ç05,
nglauber
6 comentários:
Salve.
Por algum motivo, não está encontrando a Lib.
Meu repositório:
allprojects {
repositories {
jcenter()
mavenCentral()
maven { url "https://jitpack.io" }
maven { url "http://dl.bintray.com/rubengees/maven" }
maven { url "http://dl.bintray.com/populov/maven" }
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
}
Error:A problem occurred configuring project ':app'.
> Could not find library.aar (com.viewpagerindicator:library:2.4.1).
Searched in the following locations:
https://jcenter.bintray.com/com/viewpagerindicator/library/2.4.1/library-2.4.1.aar
Alguma idéia?
Oi Fábio,
Tenta tirar o jcenter(). Funcionou comigo.
4br4ç05,
nglauber
Se eu tiro o jcenter, ele não encontra outras Libs que uso.
Se vou no Project Structure > Project, e retiro o jcenter de lá, não encontra a lib Otto (vou trocar por EventBus em breve), mas não reclama da viewpageindicator. Se adiciono mavenCentral, ai não acha ela no repositorio do Maven.
Error:A problem occurred configuring project ':app'.
> Could not find library.aar (com.viewpagerindicator:library:2.4.1).
Searched in the following locations:
https://repo1.maven.org/maven2/com/viewpagerindicator/library/2.4.1/library-2.4.1.aar
Rapaz... que sinuca de bico.
:D
O engraçado é que, em outro projeto que tinha em outra estrutura de projeto (workspace), já tinha usado/testado ela (em outra versão).
Achei uma solução viável:
trocar
compile 'com.viewpagerindicator:library:2.4.1@aar'
por
compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1@aar'
:D
Oi Fábio,
Obrigado pela dica! Post atualizado ;)
4br4ç05,
nglauber
Postar um comentário