ActionaBar Swipe Menu






Descargar código


MyActivity.java
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.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;


public class MyActivity extends ActionBarActivity implements ActionBar.TabListener, ViewPager.OnPageChangeListener {

    private ViewPager mViewPager;;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager());
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(adapter);

        mViewPager.setOnPageChangeListener(this);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        ActionBar.Tab tab = actionBar.newTab().setText("Productos").setTabListener(this);
        actionBar.addTab(tab);

        tab = actionBar.newTab().setText("Clientes").setTabListener(this);
        actionBar.addTab(tab);

        tab = actionBar.newTab().setText("Pedidos").setTabListener(this);
        actionBar.addTab(tab);

    }


    public class PagerAdapter extends FragmentPagerAdapter {

        public PagerAdapter(FragmentManager fm) {
            super(fm);
        }

        public Fragment getItem(int arg0) {
            switch (arg0) {
                case 0:
                    return new Fragment_Productos();
                case 1:
                    return new Fragment_Clientes();
                case 2:
                    return new Fragment_Pedidos();
                default:
                    return null;
            }
        }
        public int getCount() {
            return 3;
        }
    }

    //implements on pager selected
    @Override
    public void onPageScrolled(int i, float v, int i2) {

    }

    @Override
    public void onPageSelected(int i) {
        getSupportActionBar().setSelectedNavigationItem(i);
    }

    @Override
    public void onPageScrollStateChanged(int i) {

    }


    //implements tab listener
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        mViewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

    }
}

activity_my.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Fragment_Clientes.java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class Fragment_Clientes extends Fragment {
 
 View rootView;
 
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  rootView = inflater.inflate(R.layout.fm_clientes, container, false);
  return rootView;
 } 
}

fm_clientes.xml
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="soy cliente"
        android:id="@+id/texto_clientes" />

</LinearLayout>

Fragment_Pedidos.java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class Fragment_Pedidos extends Fragment {
 
 View rootView;
 int contador = 0;
 
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  rootView = inflater.inflate(R.layout.fm_pedidos, container, false);
  TextView texto = (TextView) rootView.findViewById(R.id.texto_pedidos);
  texto.setText("Incrementador de Pedidos" + "\n\n" + contador);
  contador++;
  
  return rootView;
 }
}

fm_pedidos.xml
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:id="@+id/texto_pedidos" />
</LinearLayout>

Fragment_Productos.java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class Fragment_Productos extends Fragment {
 View rootView;
 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  rootView = inflater.inflate(R.layout.fm_productos, container, false);
  return rootView;
 }
}

fm_productos.xml
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

</LinearLayout>

27 comentarios:

  1. Increibles tus codigos, muchas gracias amigo, espero sigas con tus tutoriales

    ResponderEliminar
  2. Tengo un problema no se que pueda ser, la aplicación se detiene asi nada mas no abre el menu

    ResponderEliminar
    Respuestas
    1. puede ser mil cosas, tenes que aprender el logcat, sino lo que te recomiendo es empezar un proyecto nuevo y hacer solo esto, para ver si lo estas haciendo bien... y si es así, copiarlo y pegarlo..

      Eliminar
  3. Esta perfecto todo, muchas gracias, pero necesito lo mismo, sin la barrita que dice swipe2 con el icono de android, se podra?

    ResponderEliminar
    Respuestas
    1. tenes que ir a res/values/styles.xml Theme.Holo.Light.NoActionBar o Theme.Light.NoTitleBar anda probando el que mas te guste

      Eliminar
  4. hola otravez tengo una perginta porque el mViewPager = (ViewPager) findViewById(R.id.pager); el r.idi.pager me sale rojo solo el pager que pasa ahi por favor

    ResponderEliminar
  5. Hola amigo, me encantan tus tutoriales, tengo una pregunta, en esta parte del código:

    ActionBar actionBar = getSupportActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab tab = actionBar.newTab().setText("Productos").setTabListener(this);
    actionBar.addTab(tab);

    el setNavigationMode, NAVIGATION_MODE_TABS, newTab, addTab, salen tarjados, si me pongo sobre ellos indica "is deprecated", me puedes explicar porque, gracias

    ResponderEliminar
    Respuestas
    1. Hola, Si es quiere decir que funciona por el momento, pero tienes que pensar en cambiarlo en un futuro. En otras palabras, dice, si usalo, hasta que yo diga (google)

      Eliminar
    2. te agradezco la rápida respuesta, muchas gracias.

      Eliminar
  6. Hola una pregunta como puedo meter metodos en los fragmente por ejemplo en el de pedido intento hacer un suma pero no me deja en cuanto llamo ese metodo con el evento onclick la aplicacion se cierra espero puedas ayudarme

    ResponderEliminar
  7. excelentes tutoriales amigo, queria ver si me podias ayudar con una cosa, como harias para enviarle datos a los fragment como en el tutorial de ActionBar Tabs

    ResponderEliminar
  8. Gracias por tus tutoriales, de casualidad sabes como hacer para que desde un mapa se pueda obtener una ventana emergente,

    ResponderEliminar
  9. Hola me gustaria saber como se puede hacer al momento que cargue lo haga en la segunda pestaña y no en la primera

    ResponderEliminar
  10. Hola Ramiro como estas
    Todo me fue muy bien
    pero hoy que lo abrí me salen todos los imort en negro , como si no existieran, es decir ya no estan en azul. Que puede ser?

    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.support.v4.view.ViewPager;
    import android.support.v7.app.ActionBar;
    import android.support.v7.app.ActionBarActivity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;

    ResponderEliminar
  11. Al optimizar automáticamente se borran 2 import, que puede ser?
    import android.view.Menu;
    import android.view.MenuItem;

    ResponderEliminar
  12. Estoy muy agradecido con tus códigos son un gran ayuda, explicas de manera amplia y sencilla a la vez
    Pero necesito tu ayuda :c

    Tengo un boton en un Fragment el cual quiero que me lance a otro activity

    package com.anai.proyecto_de_grado;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;

    public class FragmentsUbicacion extends Fragment {
    View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fm_ubicacion, container, false);
    Button btn = (Button)rootView.findViewById(R.id.button);
    btn.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v){
    Intent maps = new Intent(FragmentsUbicacion.this, MapsActivity.class);///////////// Cannot resolve constructor/// ERROR
    startActivity(maps);
    }
    });
    return rootView;
    }
    }

    tengo este error *****

    Error:(20, 20) error: no suitable constructor found for Intent(FragmentsUbicacion,Class)
    constructor Intent.Intent(String,Uri) is not applicable
    (argument mismatch; FragmentsUbicacion cannot be converted to String)
    constructor Intent.Intent(Context,Class) is not applicable
    (argument mismatch; FragmentsUbicacion cannot be converted to Context)

    ResponderEliminar
  13. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  14. Disculpa Ramiro, si estuviera un botón en alguno de los fragmentos, como se capturaría el evento del botón?

    ResponderEliminar
    Respuestas
    1. Ya lo solucione, gracias por tus tutos Ramiro, Excelentes! :)

      Eliminar
    2. comenta tu problema y como lo solucionaste, así le sirve a otros, porfa

      Eliminar
    3. Estoy creando una app en la cual utilizare el swipe menú y conexión a base de datos remotas, no había leído los comentarios entonces comenze a leerlos y me encontré con el comentario de Carlos Gaskell, modifique su código y el tuyo:

      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      rootView = inflater.inflate(R.layout.//aqui va el layout, container, false);
      //aqui van todos los elementos puestos en el layout.xml


      correo = (EditText)rootView.findViewById(R.id.edicorreo1);
      contra = (EditText)rootView.findViewById(R.id.edicontra1);
      btniniciar = (Button)rootView.findViewById(R.id.btniniciar);

      btniniciar.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      //Aqui al momento de presionar el boton verificare los datos (esto ya puede variar dependiendo a que utilidad le den)
      }
      });

      return rootView;
      }

      Estoy empezando en esto de android así que puedo cometer errores, por cierto Ramiro si termino el proyecto, te lo paso para que lo cheques y lo compartas, aunque ya hiciste muchos de conexión a base de datos remotas a alguien le podría servir el código.

      Eliminar
  15. Disculpa Ramiro, podrías subir un tuto o explicarme como integrar un listview con imágenes y dos textos(titulo y subtitulo) en un fragmento del swipe menu? te lo agradecería mucho, de antemano un saludo y excelentes tutoriales, gracias!

    ResponderEliminar
  16. no sirve para versiones de android studio recientes, lo probe copiando y pegando en un nuevo proyecto y no rula , parece que se abre y se cierra sola la app y el logcat señala una linea que aparece tachada pero tendria que andar

    ResponderEliminar
  17. Hola que tal muchas gracias me sirvió de mucho, solo una pregunta si arriba de los tabs deseo colocar una vista de busqueda, como mostraste en uno de tus videos, me marca error , me podrias decir como le puedo hacer para tener las dos cosas juntas (swipe tabs y la vista de busqueda)

    ResponderEliminar