Cuando comienzo una actividad que implementa viewpager, el viewpager creó varios fragmentos. Quiero usar diferentes diseños para cada fragmento, pero el problema es que el visor muestra solo dos diseños al máximo (segundo diseño en todos los fragmentos restantes después de 1).
Aquí está el código para SwipeActivity que implementa el visor:
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");
}
}
}
}
Aquí está el código para los fragmentos.
public class MyFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater paramLayoutInflater, ViewGroup paramViewGroup, Bundle paramBundle)
{
return paramLayoutInflater.inflate(R.layout.processorlayout, paramViewGroup, false);
}
}
Utilicé 5 fragmentos como este, todos con diferentes diseños, pero el visor muestra solo 2 como máximo.
EDITAR : 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);
}
}
Respuestas:
Como esta es una pregunta muy frecuente, quería tomarme el tiempo y el esfuerzo para explicar el ViewPager con múltiples Fragmentos y Diseños en detalle. Aqui tienes.
ViewPager con múltiples fragmentos y archivos de diseño: cómo
En este caso, tengo 3 clases de fragmentos y un archivo de diseño diferente para cada clase. Para simplificar las cosas, los diseños de fragmentos solo difieren en su color de fondo . Por supuesto, cualquier archivo de diseño puede usarse para los Fragmentos.
FirstFragment.java tiene un diseño de fondo naranja , SecondFragment.java tiene un diseño de fondo verde y ThirdFragment.java tiene un diseño de fondo rojo . Además, cada Fragmento muestra un texto diferente, dependiendo de qué clase es y de qué instancia es.
MainActivity.java (Inicializa el Viewpager y tiene el adaptador como clase interna). Nuevamente eche un vistazo a las importaciones . Estoy usando el
android.support.v4
paqueteactivity_main.xml (El archivo MainActivitys .xml): un archivo de diseño simple, que solo contiene el ViewPager que llena toda la pantalla.
Las clases Fragment, FirstFragment.java import android.support.v4.app.Fragment;
first_frag.xml
SecondFragment.java
second_frag.xml
ThirdFragment.java
third_frag.xml
El resultado final es el siguiente:
El Viewpager contiene 5 Fragmentos, Fragmentos 1 es del tipo FirstFragment, y muestra el diseño first_frag.xml, Fragment 2 es del tipo SecondFragment y muestra el second_frag.xml, y Fragment 3-5 son del tipo ThirdFragment y todos muestran el third_frag.xml .
Arriba puede ver los 5 Fragmentos entre los cuales se puede cambiar al deslizar hacia la izquierda o hacia la derecha. Por supuesto, solo se puede mostrar un Fragmento al mismo tiempo.
Por último, si bien no menos importante:
En lugar de entregar parámetros potenciales a través del constructor, use el
newInstance(...)
método y elBundle
para entregar parámetros.De esta manera, si se desconecta y vuelve a adjuntar, el estado del objeto se puede almacenar a través de los argumentos. Al igual que
Bundles
atado aIntents
.fuente
Cree una matriz de Vistas y aplíquela a:
container.addView(viewarr[position]);
fuente
Código para agregar fragmento
Cree un archivo xml para cada fragmento, por ejemplo para Fragment1, use fragment_one.xml como archivo de diseño, use el siguiente código en el archivo Java Fragment1.
Más tarde puede hacer las correcciones necesarias. Funcionó para mí.
fuente
Ejemplo de ViewPager básico
Esta respuesta es una simplificación de la documentación , este tutorial y la respuesta aceptada . Su propósito es hacer que
ViewPager
funcione lo más rápido posible. Se pueden hacer más ediciones después de eso.XML
Agregue los diseños xml para la actividad principal y para cada página (fragmento). En nuestro caso, solo estamos usando un diseño de fragmento, pero si tiene diferentes diseños en las diferentes páginas, simplemente haga uno para cada uno de ellos.
activity_main.xml
fragment_one.xml
Código
Este es el código para la actividad principal. Incluye el
PagerAdapter
yFragmentOne
como clases internas. Si estos se vuelven demasiado grandes o los está reutilizando en otros lugares, puede moverlos a sus propias clases separadas.Terminado
Si copió y pegó los tres archivos anteriores en su proyecto, debería poder ejecutar la aplicación y ver el resultado en la animación anterior.
Continuando
Hay bastantes cosas que puede hacer con ViewPagers. Consulte los siguientes enlaces para comenzar:
fuente
Esto también está bien:
fuente
fuente