Quando inicio uma atividade que implementa o viewpager, o viewpager criou vários fragmentos. Quero usar layouts diferentes para cada fragmento, mas o problema é que o viewpager mostra apenas dois layouts no máximo (segundo layout em todos os fragmentos restantes após 1).
Aqui está o código para SwipeActivity que implementa o viewpager:
public class SwipeActivity extends FragmentActivity
{
MyPageAdapter pageAdapter;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swipe);
pageAdapter = new MyPageAdapter(getSupportFragmentManager());
ViewPager pager=(ViewPager)findViewById(R.id.pager);
pager.setAdapter(pageAdapter);
ActionBar bar = getActionBar();
bar.setDisplayHomeAsUpEnabled(true);
}
/**
* Custom Page adapter
*/
private class MyPageAdapter extends FragmentPagerAdapter
{
public MyPageAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public int getCount()
{
return 5;
}
@Override
public Fragment getItem(int position)
{
switch(position)
{
case 0: return new MyFragment();
case 1: return SecondFragment.newInstance("asdasd");
default : return RamFragment.newInstance("s");
}
}
}
}
Aqui está o código para os fragmentos
public class MyFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
return paramLayoutInflater.inflate(R.layout.processorlayout, paramViewGroup, false);
}
}
Usei 5 fragmentos como este, todos com layouts diferentes, mas o viewpager mostra apenas 2 no máximo.
EDIT : código para SecondFragment
public class SecondFragment extends Fragment
{
public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE";
public static final SecondFragment newInstance(String paramString)
{
SecondFragment f = new SecondFragment();
Bundle localBundle = new Bundle(1);
localBundle.putString("EXTRA_MESSAGE", paramString);
f.setArguments(localBundle);
return f;
}
@Override
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
return paramLayoutInflater.inflate(R.layout.motherboardlayout, paramViewGroup, false);
}
}
Respostas:
Como essa é uma pergunta muito frequente, eu queria dedicar tempo e esforço para explicar o ViewPager com vários fragmentos e layouts em detalhes. Aqui está.
ViewPager com vários arquivos de fragmentos e layout - Como
Nesse caso, eu tenho 3 classes de fragmento e um arquivo de layout diferente para cada classe. Para manter as coisas simples, os layouts de fragmento diferem apenas na cor de fundo . Obviamente, qualquer arquivo de layout pode ser usado para os fragmentos.
FirstFragment.java tem um layout de fundo laranja , SecondFragment.java tem um layout de fundo verde e ThirdFragment.java tem um layout de fundo vermelho . Além disso, cada fragmento exibe um texto diferente, dependendo de qual classe é e de qual instância é.
MainActivity.java (Inicializa o Viewpager e possui o adaptador para ele como uma classe interna). Mais uma vez, dê uma olhada nas importações . Estou usando o
android.support.v4
pacote.activity_main.xml (arquivo .xml de MainActivitys) - um arquivo de layout simples, contendo apenas o ViewPager que preenche a tela inteira.
As classes Fragment, FirstFragment.java import android.support.v4.app.Fragment;
first_frag.xml
SecondFragment.java
second_frag.xml
ThirdFragment.java
third_frag.xml
O resultado final é o seguinte:
O Viewpager contém 5 fragmentos, os fragmentos 1 são do tipo FirstFragment e exibem o layout first_frag.xml, o fragmento 2 é do tipo SecondFragment e exibe o second_frag.xml, e o fragmento 3-5 é do tipo ThirdFragment e todos exibem o third_frag.xml .
Acima, você pode ver os 5 fragmentos entre os quais podem ser alternados por furto para a esquerda ou direita. Apenas um fragmento pode ser exibido ao mesmo tempo, é claro.
Por último mas não menos importante:
Em vez de entregar parâmetros potenciais via construtor, use o
newInstance(...)
método e oBundle
para entregar os parâmetros.Dessa forma, se desanexado e reconectado, o estado do objeto pode ser armazenado através dos argumentos. Muito parecido com
Bundles
anexado aIntents
.fonte
Crie uma matriz de Views e aplique-a a:
container.addView(viewarr[position]);
fonte
Código para adicionar fragmento
Crie um arquivo xml para cada fragmento, digamos, para Fragment1, use fragment_one.xml como arquivo de layout, use o código abaixo no arquivo java Fragment1.
Mais tarde, você pode fazer as correções necessárias. Funcionou para mim.
fonte
Exemplo básico do ViewPager
Esta resposta é uma simplificação da documentação , deste tutorial e da resposta aceita . Seu objetivo é começar a trabalhar
ViewPager
o mais rápido possível. Edições adicionais podem ser feitas depois disso.XML
Adicione os layouts de xml para a atividade principal e para cada página (fragmento). No nosso caso, estamos usando apenas um layout de fragmento, mas se você tiver layouts diferentes nas diferentes páginas, crie um para cada um deles.
activity_main.xml
fragment_one.xml
Código
Este é o código para a atividade principal. Inclui as classes
PagerAdapter
eFragmentOne
como internas. Se elas ficarem muito grandes ou você as estiver reutilizando em outros lugares, poderá movê-las para suas próprias classes separadas.Acabado
Se você copiou e colou os três arquivos acima no seu projeto, poderá executar o aplicativo e ver o resultado na animação acima.
Indo
Existem algumas coisas que você pode fazer com os ViewPagers. Veja os seguintes links para começar:
fonte
Isso também é bom:
fonte
fonte