Cómo actualizar la vista actual en ViewPager
Estoy utilizando ViewPager
con vistas V1, V2, V3 ….. Estoy intentando fijar la visibilidad de un LinearLayout usado en cada visión, chascando en un botón. A través de este código se aplica el cambio en la vista siguiente en lugar de la vista actual. Por ejemplo, estoy en V5. Cuando hago clic en ocultar / mostrar el objeto en V6. Si estoy retrocediendo de V6 a V5, entonces aplica el cambio en V4.
Aquí está el código:
- Loader entrega el resultado al fragmento incorrecto
- ViewPager con múltiples PageTransformer (PageTransformers en Runtime)
- Viewpager no funciona correctamente en lollipop 5.0 cuando uso otros fragmentos
- ViewPager se desplaza programáticamente
- Función Cover Flow con vista pager android
public class FragmentStatePagerSupport extends FragmentActivity { static final int NUM_ITEMS = 10; MyAdapter mAdapter; ViewPager mPager; static int mNum; private Button btn_zoom; static LinearLayout LL_Head; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_pager); mAdapter = new MyAdapter(getSupportFragmentManager()); mPager = (ViewPager)findViewById(R.id.pager); mPager.setAdapter(mAdapter); mPager.setCurrentItem(5); btn_zoom = (Button)findViewById(R.id.btn_zoom); btn_zoom.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { if (LL_Head.getVisibility() == View.VISIBLE) { LL_Head.setVisibility(View.GONE); }else{ LL_Head.setVisibility(View.VISIBLE); } } }); . . . } public static class MyAdapter extends FragmentStatePagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return NUM_ITEMS; } @Override public Fragment getItem(int position) { return ArrayListFragment.newInstance(position); } } public static class ArrayListFragment extends ListFragment { static ArrayListFragment newInstance(int num) { ArrayListFragment f = new ArrayListFragment(); Bundle args = new Bundle(); args.putInt("num", num); f.setArguments(args); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mNum = getArguments() != null ? getArguments().getInt("num") : 1; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.sura_vpager, container, false); TextView tv1=(TextView) v.findViewById(R.id.txtHead); tv1.setText("Fragment #" + mNum); LL_Head = (LinearLayout)v.findViewById(R.id.LL_Head); return v; }
Por favor asesóreme, gracias
- Android ViewPager: fragmentos superpuestos cuando el ancho de página se establece en 90%
- Desplazamiento vertical en el visor
- Tab + ViewPager no se actualiza en su lugar muestra advertencia extraña estado esperado 3 encontrado 2
- El desplazamiento de ViewPager no funciona con RecyclerView
- Funciones de llamada dentro de fragmentos en Android
- Cómo hacer que PagerAdapter cargue todas las páginas
- ¿Cómo implementar el desplazamiento horizontal dentro de un fragmento?
- Android.support.v4.app.FragmentManager y android.app.FragmentManager en ViewPager
Con el fin de hacer una experiencia fluida ViewPager no sólo carga la vista que está mirando actualmente, sino también las vistas adyacentes. Esto significa que si usted está desplazándose de la posición 0 a la posición 1, lo que realmente sucede es que la posición 2 está cargada, por lo que estará listo cuando se desplace. Esta es la razón por la que el cambio se aplica a la vista "siguiente", en lugar de la actual (si se desplaza de la vista 2 a 1, se crea la vista 0).
Dado que está configurando el LinearLayout estático en OnCreate, entonces sólo se creará la última vista que se cambie, y ésta sólo será la que esté buscando, si se ha desplazado hasta el final del buscapersonas. En su lugar, debe realizar un seguimiento del fragmento que el usuario está viendo (ViewPager.setOnPageChangeListener ()) y almacenar en caché el fragmento en su adaptador. A continuación, usted sabe qué posición de fragmento que desea, y cuando lo pide, sólo va a volver el que creó anteriormente (no crear uno nuevo, entonces no funcionará :)).
O, la versión del tl; dr: LL_Head casi siempre se fija para ser el fragmento siguiente, no el actual. No lo fije estáticamente. Cachéelo en su PagerAdapter y regítelo cuando lo necesite.
Edit: Alternativamente, es posible que desee que los fragmentos escuchen un evento de tipo, que les dice si deben mostrar u ocultar el diseño en cuestión. De lo contrario sólo será el fragmento actual el que se ve afectado por esto, en lugar de todos los fragmentos.
La numeración en Java comienza a partir de 0. Así, cuando se desea establecer el quinto elemento, hay que llamar a mPager.setCurrentItem (4);
¡Espero que esto ayude!
- FPS bajo con Android SurfaceView
- ¿Cómo colocar una vista de imagen encima de otro diseño como se muestra en la figura?