View Pager dentro DialogFragment
Buenas developers, en esta ocasión vamos a combinar un Dialog con un View Pager. Este tipo de combos los podemos usar para desarrollar tutoriales dentro de nuestras aplicaciones entre otras cosas.
Antes de empezar quiero destacar que la implementación de la librería android.support.v4.app es una chapuza de las más grandes de Android, y todo por la maldita fragmentación, así que en este caso voy a poner todos los imports de las clases para que no haya confusión ante las librerías que usan los objetos.
Comenazmos creando 2 fragments : fragmento y fragmento2 :
import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class fragmento extends Fragment { private OnFragmentInteractionListener mListener; // TODO: Rename and change types and number of parameters public static fragmento newInstance(String param1, String param2) { fragmento fragment = new fragmento(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } public fragmento() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragmento, container, false); } @Override public void onDetach() { super.onDetach(); mListener = null; } public interface OnFragmentInteractionListener { // TODO: Update argument type and name public void onFragmentInteraction(Uri uri); } }
import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class fragmento2 extends Fragment { public fragmento2() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragmento2, container, false); } @Override public void onDetach() { super.onDetach(); } public interface OnFragmentInteractionListener { // TODO: Update argument type and name public void onFragmentInteraction(Uri uri); } }
Y ahora vamos con el DialogFragment, que es quien va a contener el pager, con su correspondiente adaptador :
import android.app.Dialog; import android.support.v4.app.DialogFragment; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; /** * Created by makone on 16/03/2015. */ public class fragmentDialogo extends DialogFragment{ private PageAdapter PagAdapter; //ADAPTADOR private ViewPager viewPager; @Override public Dialog onCreateDialog(final Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); //Configuracion Dialog dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); return dialog; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_dialog, container); //INFLAMOS CON LA VIEW android.support.v4.app.FragmentManager fm = getChildFragmentManager(); PagAdapter = new PageAdapter(fm); //CREAMOS ADAPTER viewPager = (ViewPager)view.findViewById(R.id.pager); //INICIAMOS PAGER viewPager.setAdapter(PagAdapter); //APLICAMOS ADAPTER AL PAGER return view; } }
import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; public class PageAdapter extends FragmentPagerAdapter { public PageAdapter(FragmentManager fm) { super(fm); } @Override public android.support.v4.app.Fragment getItem(int position) { if (position == 0) { // find first fragment... fragmento ft1 = new fragmento(); return ft1; } if (position == 1) { // find first fragment... fragmento2 ft2 = new fragmento2(); return ft2; } return null; } @Override public int getCount() { return 2; } }
Bien, ya está todo montado, solo falta nuestra actividad principal crear un botón para llamar al Dialog con el pager cargado :
import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.view.View; import android.widget.Button; public class MainActivity extends FragmentActivity { private Button boton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); boton = (Button) findViewById(R.id.botonAction); //REFERENCIA AL BOTON boton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { openDialog(v); } }); } public void openDialog(View view) { FragmentManager fm = getSupportFragmentManager(); fragmentDialogo overlay = new fragmentDialogo(); overlay.show(fm, "FragmentDialog"); } }
Y este es el resultado :