Estoy usando ViewPager
para deslizar entre Fragments
, pero ¿puedo usar ViewPager
para deslizar entre Views
un diseño XML simple?
Esta es mi página Adapter
para ViewPager que se usa para deslizar entre Fragmentos:
import java.util.List;
import com.app.name.fragments.TipsFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.view.ViewGroup;
public class PageAdapter extends FragmentPagerAdapter {
/**
*
*/
List<Fragment> fragments;
public PageAdapter(FragmentManager fm,List<Fragment> frags) {
super(fm);
fragments = frags;
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return TipsFragment.newInstance(0, 0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 4;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
super.destroyItem(container, position, object);
}
}
Y este es mi fragmento de punta:
public class TipsFragment extends Fragment
{
public static TipsFragment newInstance(int image,int content)
{
TipsFragment fragment = new TipsFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tip_layout, null);
return view;
}
}
¿Cómo puedo modificar mi código para que funcione con Vistas en lugar de Fragmento?
ViewPager
por loonDestroy
tantoonResume
, no habrá necesidad de recuperar los 3 fragmentos que ya no están disponibles. Solo quería mencionar uno de los problemas.Respuestas:
Debe anular estos dos métodos en lugar de
getItem()
:fuente
ViewPager
nada ya que se trata de laViewGroup
interfazUsa este ejemplo
Puede usar un diseño XML único que anida las vistas secundarias.
PERO ... necesita manejar esto con un adaptador también. Aquí devolvemos el ID de la vista encontrada sin inflar ningún otro diseño.
// Establecer el adaptador ViewPager
fuente
return collection.findViewById(resId);
Si no desea pasar una instancia de actividad@Override public void destroyItem(ViewGroup container, int position, Object object) {}
Hemos construido una subclase muy simple de la
ViewPager
que usamos a veces.Esta clase no necesita un adaptador, ya que cargará las vistas desde el diseño. Para usarlo en tus proyectos, solo úsalo en lugar de
android.support.v4.view.ViewPager
.Todas las cosas elegantes seguirán funcionando, pero no necesita preocuparse por los adaptadores.
fuente
onAttachedToWindow()
aonFinishInflate()
.Basado en las respuestas anteriores, hice la siguiente clase para lograr eso de una manera adecuada y más clara (espero):
Y tienes que configurarlo en tu actividad:
Donde los archivos XML son obvios view_screen.xml:
Y ActivtyMain tiene el siguiente diseño:
Muchas gracias a Brian y Nicholas por su respuesta, espero agregar información más clara y resaltar algunas buenas prácticas para esta función.
fuente
Me gustaría dar más detalles sobre la respuesta de @Nicholas, puede obtener las vistas por id o si se agregan dinámicamente solo obtenga la vista directamente dada su posición
fuente
Me gustaría agregar mi solución aquí. Dado que no necesita usar fragmentos, aún puede crear uno
PagerAdapter
que se adjunte enviews
lugar defragments
alViewPager
.Extender en
PagerAdapter
lugar deFragmentPagerAdapter
Ahora debe definir tres clases que devolverán el valor
views
inflado enviewpager
. Similar a loCpuView
que tendráMemoryView
yNetworkView
clases. Cada uno de ellos inflará sus respectivos diseños.Y finalmente un diseño que se inflará en cada una de las vistas.
PD: La razón por la que escribí esta respuesta es porque todas las soluciones proporcionadas aquí parecen estar funcionando bien, pero están inflando los diseños en la clase PagerAdapter. Para proyectos grandes, se hace difícil mantener si hay mucho código relacionado con los diseños inflados. Ahora, en este ejemplo, todas las vistas tienen clases separadas y diseños separados. Por lo tanto, el proyecto se puede mantener fácilmente.
fuente
sí ... puede usar Ver en lugar de Fragmento en el visor. Aquí puede encontrar el ejemplo de Find Whole que lo ayudará a lograr Viewpager sin Fragment. Revisa esta documentación.
https://www.bignerdranch.com/blog/viewpager-without-fragments/
fuente