Ejemplo Tiendita con Base de Datos, Usuarios y opción de agregar mas productos

Este ejemplo es la continuación del ejemplo anterior en el cual le agregamos almacenamiento con base de datos mas otras acciones con ella, puedes utilizar la aplicación de Tiendita sin Base de datos y agregar lo nuevo pero te recomiendo que empieces desde cero..

@Autor: Prof. Luis Mitre

Paso 1.

Iniciamos creando un nuevo proyecto en android Studio el cual llamare MiTiendita:

Al crear un nuevo proyecto aparecerá la imagen anterior.

  1. nombre de la Aplicación
  2. Paquete de instalación de la aplicación en Android, dejar por default el que pone android
  3. Ubicación del proyecto en la computadora preferentemente poner una ubicación fácil de localizar ya que necesitaremos acceder a ella.

Una vez llenado los datos oprimimos Next y aparacera la ventana siguente:

en la cual elegiremos el tipo de actividad que insertaremos por primera vez, es este caso es del tipo Empty Activity la seleccionamos y daremos siguiente:

en la ventana ponemos el nombre que recibirá nuestra actividad la cual Llamare VentanaFlashActivity, la cual sera la portada de inicio de nuestra aplicación.

Paso 2. 

Nos ubicaremos con el navegador de Windows en la ubicación de nuestro proyecto en el cual entraremos a la siguiente ruta:  C:\UbicacionDelProyecto\MiTienda\app\src\main\res en el cual encontraras las siguientes carpetas:

ahora procederemos a crear 5 carpetas con los nombres siguientes:

  1. drawable-mdpi
  2. drawable-hdpi
  3. drawable-xhdpi
  4. drawable-xxhdpi
  5. drawable-xxxhdpi

las cuales son donde almacenáramos las imágenes que utilizaremos en nuestra aplicación, quedando de la siguiente manera:

Cabe mencionar que el objetivo de estas carpetas es que debido a que tenemos diferentes tamaños y resoluciones de dispositivos es necesario poner las imágenes apropiadas para cada tipo para ello nos apoyaremos con la siguiente tabla:

una vez puesto las imágenes a utilizar para nuestra ventanaSplash procederemos a los siguiente.

Paso 3. 

Procedemos a poner una imagen en la ventana visual de nuestra actividad que en mi caso se llama: activity_ventana_flash.xml, quedando el código de la siguiente manera:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context="com.profeluismitre.mitienda.VentanaFlashActivity">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:src="@drawable/fondo"/>
 <ProgressBar
        android:id="@+id/splash_screen_progress_bar"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        style="@android:style/Widget.DeviceDefault.ProgressBar.Horizontal"
        android:layout_marginTop="50dp" />
</LinearLayout>

la cual se observaría de la siguiente manera:

Procederemos a asignarle código a la parte Java de esta actividad, el cual quedaría de la siguiente manera:

import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Window;
import android.widget.ProgressBar;

import librerias.Escaneo;
import librerias.MiBaseDatos;

public class VentanaFlashActivity extends Activity {
   private ProgressBar mProgress;
    boolean usuarioActivo=false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_ventana_flash);
        mProgress = (ProgressBar) findViewById(R.id.splash_screen_progress_bar);

        // iniciamos un hilo que se ejecuta en segundo plano
        new Thread(new Runnable() {
            public void run() {
                accionPricipal();
                iniciarActividad();
                finish();
            }
        }).start();

    }

    /**
     * metodo que verifica si existe usuario activo o no
     */
    public void usuario(){
        MiBaseDatos baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sql=baseDatos.getReadableDatabase();
        String[] columnas={"usuario","estatus","tipo"};

        Cursor cursor= sql.query("usuarioActivo",columnas,null,null,null,null,null,null);
        if(cursor.getCount()!=0){
            if(cursor.moveToFirst()){
                Escaneo.usuario=cursor.getString(cursor.getColumnIndex("usuario"));
                Escaneo.tipousuario=cursor.getString(cursor.getColumnIndex("tipo"));
                usuarioActivo=true;
                sql.close();
                datosUsuario();
            }
        }
    }

    /**
     * este metodo es el que permite llenar la barra de progreso
     * para que se vea como que esta activa
     */
    private void accionPricipal() {
        for (int progress=0; progress<100; progress+=10) {
            try {
                Thread.sleep(800);
                mProgress.setProgress(progress);
            } catch (Exception e) {
                e.printStackTrace();

            }
        }
        usuario();
    }

    /**
     * este metodo nos trae la informacion de usuario que esta iniciado en sesion
     *
     */
    private void datosUsuario(){
        MiBaseDatos baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sql=baseDatos.getReadableDatabase();
        String[] columnas={"usuario","nombre","apellidos","tipo"};
        Cursor cursor= sql.query("usuarios",columnas,null,null,null,null,null,null);
        if(cursor.getCount()!=0){
            if(cursor.moveToFirst()){
                Escaneo.nomUsuario=cursor.getString(cursor.getColumnIndex("nombre"));
                Escaneo.aPUsuario=cursor.getString(cursor.getColumnIndex("apellidos"));
                Escaneo.tipousuario=cursor.getString(cursor.getColumnIndex("tipo"));
            }
        }
        sql.close();
    }

    /**
     * metodo que decide que actividad mandara llamar dependiendo de
     * que si hay usuario activo o no.
     */
    private void iniciarActividad() {
        Log.d("Accion", "Iniciando actividad login o pricipal");
        if(usuarioActivo) {
            Intent intent = new Intent(VentanaFlashActivity.this, PrincipalActivity.class);
            startActivity(intent);
        }else{
            Intent intent = new Intent(VentanaFlashActivity.this, LoginActivity.class);
            startActivity(intent);
        }
    }
}

Nota: en caso de que no se quite el titulo de la actividad al ejecutar la aplicación tendremos que cambiar la herencia de la actividad VentanaSplashActivity que en mi caso es: AppCompatActivity por Activity esto es solo si no se quita el titulo.

Nota 2: Tendras unos errores ya que en la clase implementamos el uso de la base de datos que mas adelante crearemos No te Alarmes…..

Paso 4.

Creamos una nueva actividad pero ahora del tipo LoginActivity la cual la llamaremos Así, dando click derecho sobre la Carpeta APP:

Una vez creada la activity, como es una actividad pre diseñada por android Studio le aremos algunos cambios y borraremos código que para nuestro ejemplo no necesitaremos.

Empezaremos con la ventana Visual, ingresamos al archivo creado xml llamado activity_login.xml

Primero modificamos la caja de texto de usuario:

Código original:

 <AutoCompleteTextView
    android:id="@+id/email"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/prompt_email"
    android:inputType="textEmailAddress"
    android:maxLines="1"
    android:singleLine="true" />

Código Modificado:

 <AutoCompleteTextView
    android:id="@+id/txtUsuario"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Usuario"
    android:inputType="text"
    android:maxLines="1"
    android:singleLine="true" />

Segundo modificamos la caja de texto de Contraseña:

Código Original:

<EditText
 android:id="@+id/password"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="@string/prompt_password"
 android:imeActionId="@+id/login"
 android:imeActionLabel="@string/action_sign_in_short"
 android:imeOptions="actionUnspecified"
 android:inputType="textPassword"
 android:maxLines="1"
 android:singleLine="true" />

Código modificado:

<EditText
 android:id="@+id/txtContrasena"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:hint="Contraseña"
 android:imeActionId="@+id/login"
 android:imeActionLabel="@string/action_sign_in_short"
 android:imeOptions="actionUnspecified"
 android:inputType="textPassword"
 android:maxLines="1"
 android:singleLine="true" />

Por ultimo modificamos el Botón:

Código original:

 <Button
  android:id="@+id/email_sign_in_button"
  style="?android:textAppearanceSmall"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginTop="16dp"
  android:text="@string/action_sign_in"
  android:textStyle="bold" />

Código modificado:

<Button
  android:id="@+id/btnAcceso"
  style="?android:textAppearanceSmall"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginTop="16dp"
  android:text="Ingresar"
  android:textStyle="bold" />

Paso 5.  

Ahora en la clase java de esta actividad llamada LoginActivity.java borraremos prácticamente todo el código que se encuentra en ella quedando de la siguiente manera:

public class LoginActivity extends AppCompatActivity{

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

Ahora procedemos a darle acciones al botón para validar el usuario, el usuario y contraseña estarán en una variable, el código quedara de la siguiente manera:

import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

import librerias.Escaneo;
import librerias.MiBaseDatos;


public class LoginActivity extends AppCompatActivity{Button btnlogin;
   //creamos los objetos que necesitaremos
    EditText txtUsuario;
    EditText txtPassword;
    MiBaseDatos baseDatos;
    String usuario;
    String tipo;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        //inicializamos los objetos
        btnlogin=(Button)findViewById(R.id.btnAcceso);
        txtUsuario=(EditText)findViewById(R.id.txtUsuario);
        txtPassword=(EditText)findViewById(R.id.txtContrasena);
        //damos accional boton acceso el cual manda llamar a un metodo
        btnlogin.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                acceso(view);
            }
        });
    }
    //metodo que verifica en la base de datos que exista el usuario.
    public void acceso(View v){
        //Se inicializa la clase.
        baseDatos = new MiBaseDatos(getApplicationContext());
        //Se establecen permisos de lectura
        SQLiteDatabase sqlite = baseDatos.getReadableDatabase();
        //Columnas que devolverá la consulta.
        String[] columnas = {
                "usuario",
                "password",
                "tipo",
                "nombre",
                "apellidos"};

        String consulta = "usuario LIKE '" +  txtUsuario.getText().toString() + "'";

        if(consulta.equals(""))
        {
            Snackbar.make(v, "Usuario y/o Password incorrecto", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }else
        {
            //Ejecuta la sentencia devolviendo los resultados de los parámetros pasados de tabla, columnas, producto y orden de los resultados.
            Cursor cursor = sqlite.query("usuarios", columnas, consulta,null , null, null, null);
            //se verifica que haya respuesta
            if(cursor.getCount() != 0)
            {//nos ponemos en el primer registro para poder leer
                cursor.moveToFirst();
                Escaneo.usuario=cursor.getString(cursor.getColumnIndex("usuario"));
                String password=cursor.getString(cursor.getColumnIndex("password"));
                Escaneo.nomUsuario=cursor.getString(cursor.getColumnIndex("nombre"));
                Escaneo.aPUsuario=cursor.getString(cursor.getColumnIndex("apellidos"));
                Escaneo.tipousuario=cursor.getString(cursor.getColumnIndex("tipo"));
                //se verifica que la contraseña sea la correcta
                if(password.equals(txtPassword.getText().toString())){
                    ingresar();
                    new TareaAsincrona(this).execute();
                }
            }
            else
            {
                Snackbar.make(v, "Usuario y/o Password incorrecto", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }

        }
        //Se cierra la conexión abierta a la Base de Datos
        sqlite.close();
    }
    //una vez verificado e ingresado se almacena la sesion para que en la ventana
    //flash se pueda validar
    public void ingresar(){
        baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sqlite=baseDatos.getWritableDatabase();
        ContentValues contenido=new ContentValues();
        contenido.put("usuario",usuario);
        contenido.put("estatus","activo");
        contenido.put("tipo",tipo);
        sqlite.insert("usuarioActivo",null,contenido);
        sqlite.close();


    }
    //tarea que realiza la accion de busqueda
    private class TareaAsincrona extends AsyncTask<Void, Void, String> {
        private ProgressDialog nDialog;
        String boton;
        public TareaAsincrona(LoginActivity activity){
            nDialog = new ProgressDialog(activity); //Here I get an error: The constructor ProgressDialog(PFragment) is undefined

        }
        @Override
        protected String doInBackground(Void... voids) {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        protected void onPreExecute() {
            nDialog.show();
            nDialog.setContentView(R.layout.dialogo_verificando);
            ingresar();

        }

        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (nDialog.isShowing()) {
                nDialog.dismiss();
                Intent intento = new Intent(getApplicationContext(), PrincipalActivity.class);
                startActivity(intento);
                finish();
            }
        }
    }
}

Nota: marcara error en algunas partes, este se quitara en el paso siguiente.

Paso 6. 

Crearemos la Actividad Principal la cual sera del tipo NavigationDrawerActivity la cual llamaremos PrincipalActivity:

Ahora procederemos a modificar la actividad para que quede a nuestro gusto empezaremos con modificar la barra lateral de navegacion de esta Actividad:

Paso a: cambiaremos la imagen y titulo de la barra de navegacion en el archivo llamado nav_header_principal.xml ubicado en la carpeta Layaout:

las flechas rojas indican la ubicación del archivo y las propiedades que cambiaremos quedando el código ya modificado de la siguiente manera:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="@dimen/nav_header_height"
    android:background="@drawable/side_nav_bar"
    android:gravity="bottom"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="80dp"
        android:layout_height="60dp"
        android:paddingTop="10dp"
        app:srcCompat="@drawable/barcode" />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="10dp"
        android:text="Mi Tiendita"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Mi Tiendita"
        android:id="@+id/txtUsuarioNav" />

    <TextView
        android:id="@+id/txtDatosNav"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Profesor Luis Mitre" />

</LinearLayout>

Paso b: ahora cambiaremos las opciones que aparecerán en el menú deslizable, este archivo se encuentra en la carpeta menu y este se llama activity_principal_drawer.xml.

dentro de este estan los menus u opciones las cuales las modificaremos quedando de la siguiente manera:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_pricipal"
            android:icon="@drawable/ic_menu_gallery"
            android:title="Principal" />
        <item
            android:id="@+id/nav_registrar"
            android:icon="@drawable/ic_menu_camera"
            android:title="Registrar" />
        <item
            android:id="@+id/nav_consultar"
            android:icon="@drawable/ic_menu_slideshow"
            android:title="Consultar" />
        <item
            android:id="@+id/nav_ventas"
            android:icon="@drawable/ic_menu_manage"
            android:title="Ventas" />
        <item
            android:id="@+id/nav_inventario"
            android:icon="@drawable/ic_menu_send"
            android:title="Inventario" />
        <item
            android:id="@+id/nav_agregar"
            android:icon="@drawable/ic_menu_send"
            android:title="Registrar mas Producto" />

    <!-- Sección de configuración -->
    <item
        android:id="@+id/configuration_section"
        android:title="Administración">
        <menu>
            <item
                android:id="@+id/nav_nuevoUsuario"
                android:icon="@drawable/ic_menu_manage"
                android:title="Agregar Usuario" />
            <item
                android:id="@+id/nav_log_out"
                android:icon="@drawable/log_out"
                android:title="Cerrar Sesion" />
            <item
                android:id="@+id/nav_log_exit"
                android:icon="@android:drawable/btn_dialog"
                android:title="Salir de la App" />

        </menu>
    </item>
</group>

</menu>

Paso c: para evitar que nos marque error nuestra actividad Principal por haber modificado los menus iremos al Archivo PrincipalActivity.java en el cual ubicaremos un metodo llamado: onNavigationItemSelected(MenuItem item) el cual modificaremos quedando de la siguiente manera:

 public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_pricipal) {
           
        } else if (id == R.id.nav_registrar) {
           
        } else if (id == R.id.nav_consultar) {
           
        } else if (id == R.id.nav_ventas) {
            
        }else if(id==R.id.nav_inventario){
           
        }else if(id==R.id.nav_agregar){
           
        }else if(id==R.id.nav_log_exit){
            
        }else if(id==R.id.nav_log_out){
            
        }else if(id==R.id.nav_nuevoUsuario){
           
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

este método es el que nos ayudara a movernos entre ventanas.

Paso 7.  

Ahora crearemos los fragmentos que serán las subVentanas que pondremos en nuestra actividad principal que son las que harán las funciones de nuestra aplicación.

Creamos el primer fragmento el cual se llamara PortadaFragment dando click derecho sobre APP y luego en fragment y posteriormente en Fragment(Blank):

una vez creado el fragmenta al igual que las activities se generan 2 archivos un XML y otro JAVA por el momento modificaremos el archivo JAVA borrando la mayor parte del código solo quedara lo siguiente:

public class PortadaFragment extends Fragment {   

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_portada, container, false);
    }
}

lo mismo haremos con los fragmentos restantes llamados:

  1. RegistrarFragment
  2. ConsultarFragment
  3. VentasFragment
  4. InventarioFragment
  5. NuevoUsuarioFragment
  6. AgregarFragment

aplicando el mismo procedimiento que el anterior.

Paso 8.

una vez creado todos los fragmentos procederemos a poner los componente visuales en cada fragmento para visualizar en cada ventana:

Fragmento Portada:

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center|top">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Mi Tiendita"
            android:gravity="center"
            android:textSize="25dp"
            android:layout_marginTop="20dp"
            />
        <ImageView
            android:layout_width="200dp"
            android:layout_height="300dp"
            android:src="@drawable/barcode"
            android:layout_marginTop="25dp"/>
        <TextView
            android:layout_marginTop="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hecho por Luis Mitre"/>



    </LinearLayout>

Nota: el codigo tendras que copiarlo entre las etiquetas de <FrameLayout> y </FrameLayout> ya que son las que marcan el inicio y el fin del fragmento

Fragmento Registrar:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center|top">

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <AutoCompleteTextView
                android:id="@+id/txtCodigoRegistro"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="30dp"
                android:hint="Codigo"
                android:inputType="number"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableRight="@drawable/iconoqr"
            android:drawablePadding="8dp"
            android:id="@+id/btnScannerRegistro"
            android:textColor="@android:color/black"
            android:backgroundTint="#BBF4FA"
            android:text="Escanear"
            android:textSize="20dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp">

            <AutoCompleteTextView
                android:id="@+id/txtDescRegistro"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:textSize="30dp"
                android:hint="Descripción"
                android:inputType="text"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp">

            <AutoCompleteTextView
                android:id="@+id/txtCantidadRegistro"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:textSize="30dp"
                android:hint="Cantidad"
                android:inputType="number"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp">

            <AutoCompleteTextView
                android:id="@+id/txtPrecioRegistro"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:textSize="30dp"
                android:hint="Precio"
                android:inputType="numberDecimal"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btnGrabarRegistro"
            android:textColor="@android:color/black"
            android:backgroundTint="#BBF4FA"
            android:text="Grabar"
            android:textSize="20dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btnCancelarRegistro"
            android:textColor="@android:color/black"
            android:backgroundTint="#BBF4FA"
            android:text="Cancelar"
            android:textSize="20dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
    </LinearLayout>

Fragmento Consultar:

<LinearLayout
        android:layout_marginTop="25dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center|top">


        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <AutoCompleteTextView
                android:id="@+id/txtDescConsultar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="30dp"
                android:hint="Descripción"
                android:inputType="text"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableRight="@drawable/buscartres"
            android:drawablePadding="8dp"
            android:id="@+id/btnBusCons"
            android:textColor="@android:color/black"
            android:backgroundTint="#BBF4FA"
            android:text="Buscar"
            android:textSize="20dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />

        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingTop="30dp"
            android:divider="#FFCC00"
            android:dividerHeight="4px"
            android:id="@+id/listaConsultas">

        </ListView>
    </LinearLayout>

Fragmento Ventas:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center|top"
        android:layout_marginTop="15dp">


        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <AutoCompleteTextView
                android:id="@+id/txtCodigoVentas"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="30dp"
                android:hint="Codigo"
                android:inputType="number"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableRight="@drawable/iconoqr"
            android:drawablePadding="8dp"
            android:textColor="@android:color/black"
            android:backgroundTint="#BBF4FA"
            android:text="Escanear"
            android:textSize="20dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true"
            android:id="@+id/btnScanerVentas"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center|top"
            android:layout_marginTop="15dp">
            <ListView
                android:id="@+id/listaVentas"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="20dp"
                android:divider="#E4E5E4"
                android:layout_weight="10"
                android:dividerHeight="4px">

            </ListView>
            <Button
                android:id="@+id/btnCobrarVentas"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:drawableRight="@drawable/iconocaja"
                android:drawablePadding="8dp"
                android:textColor="@android:color/black"
                android:backgroundTint="#BBF4FA"
                android:text="Cobrar"
                android:textSize="20dp"
                android:layout_marginTop="10dp"
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"/>
        </LinearLayout>

    </LinearLayout>

Fragmento Inventario:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center|top">
        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingTop="30dp"
            android:divider="#FFCC00"
            android:dividerHeight="4px"
            android:id="@+id/listaInventario">

        </ListView>

    </LinearLayout>

Fragmento Nuevo Usuario:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center|top">

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <AutoCompleteTextView
                android:id="@+id/txtUsuarioNuevo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="30dp"
                android:hint="Usuario"
                android:inputType="text"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>



        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp">

            <AutoCompleteTextView
                android:id="@+id/txtPassNuevo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:textSize="30dp"
                android:hint="Contraseña"
                android:inputType="textPassword"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp">

            <AutoCompleteTextView
                android:id="@+id/txtNombreNuevo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:textSize="30dp"
                android:hint="Nombre del Usuario"
                android:inputType="text"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp">

            <AutoCompleteTextView
                android:id="@+id/txtApellidoNuevo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:textSize="30dp"
                android:hint="Apellido del Usuario"
                android:inputType="text"
                android:maxLines="1"
                android:singleLine="true"
                android:imeOptions="actionDone"/>

        </android.support.design.widget.TextInputLayout>


            <Spinner
                android:id="@+id/spnUsuarioNuevo"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true">

            </Spinner>


        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btnGrabarNuevo"
            android:textColor="@android:color/black"
            android:backgroundTint="#BBF4FA"
            android:text="Grabar"
            android:textSize="20dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btnCancelarNuevo"
            android:textColor="@android:color/black"
            android:backgroundTint="#BBF4FA"
            android:text="Cancelar"
            android:textSize="20dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
    </LinearLayout>

 

Fragmento Agregar:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center|top">

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <AutoCompleteTextView
                android:id="@+id/txtCodigoAgregar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="30dp"
                android:hint="Codigo"
                android:inputType="number"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:drawableRight="@drawable/iconoqr"
            android:drawablePadding="8dp"
            android:id="@+id/btnScannerAgregar"
            android:textColor="@android:color/black"
            android:backgroundTint="#BBF4FA"
            android:text="Escanear"
            android:textSize="20dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />



            <AutoCompleteTextView
                android:id="@+id/txtDescAgregar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:textSize="30dp"
                android:hint="Descripción"
                android:inputType="none"
                android:maxLines="1"
                android:editable="false"
                android:singleLine="true" />

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp">

            <AutoCompleteTextView
                android:id="@+id/txtCantidadAgregar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:textSize="30dp"
                android:hint="Cantidad"
                android:inputType="number"
                android:maxLines="1"
                android:singleLine="true" />

        </android.support.design.widget.TextInputLayout>

            <AutoCompleteTextView
                android:id="@+id/txtPrecioAgregar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="15dp"
                android:textSize="30dp"
                android:hint="Precio"
                android:editable="false"
                android:inputType="none"
                android:maxLines="1"
                android:singleLine="true" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btnGrabarAgregar"
            android:textColor="@android:color/black"
            android:backgroundTint="#BBF4FA"
            android:text="Grabar"
            android:textSize="20dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btnCancelarAgregar"
            android:textColor="@android:color/black"
            android:backgroundTint="#BBF4FA"
            android:text="Cancelar"
            android:textSize="20dp"
            android:layout_marginTop="10dp"
            android:layout_centerVertical="true"
            android:layout_centerHorizontal="true" />
    </LinearLayout>

 

Paso 9.

Ahora ya que tenemos los fragmentos listo procederemos a crear una clase que es la que nos permitirá insertar los fragmentos en la Actividad Principal para ello crearemos un paquete llamado Librerias :

ahora dentro del paquete librerías creamos la clase llamada   NonSwipeableViewPager la cual nos permitirá insertar los fragmentos a nuestra actividad

una vez creada la clase pondremos el siguiente código:

public class NonSwipeableViewPager extends ViewPager {

    public NonSwipeableViewPager(Context context) {
        super(context);
        setMyScroller();
    }

    public NonSwipeableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        setMyScroller();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        // Never allow swiping to switch between pages
        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Never allow swiping to switch between pages
        return false;
    }

    //down one is added for smooth scrolling

    private void setMyScroller() {
        try {
            Class<?> viewpager = ViewPager.class;
            Field scroller = viewpager.getDeclaredField("mScroller");
            scroller.setAccessible(true);
            scroller.set(this, new MyScroller(getContext()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public class MyScroller extends Scroller {
        public MyScroller(Context context) {
            super(context, new DecelerateInterpolator());
        }

        @Override
        public void startScroll(int startX, int startY, int dx, int dy, int duration) {
            super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
        }
    }
}

ahora en el archivo xml llamada contentPrincipal en la carpeta layout agregamos el siguiente componente que es la clase que creamos:

<librerias.NonSwipeableViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/paginador">
    </librerias.NonSwipeableViewPager>

Paso 10.

Una vez que hayamos creado la clase anterior y la hayamos agregado al content principal procedemos a crear una clase que sera la encargada de indicarnos cual fragmento se tiene que observar al igual este nos permitirá estar cambiándolos, esta clase sera llamada PaginasAdapter y la crearemos dentro del paquete librerias. la cual quedaría de la siguiente manera:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;

import com.profeluismitre.mitienda.AgregarFragment;
import com.profeluismitre.mitienda.ConsultarFragment;
import com.profeluismitre.mitienda.InventarioFragment;
import com.profeluismitre.mitienda.NuevoUsuarioFragment;
import com.profeluismitre.mitienda.PortadaFragment;
import com.profeluismitre.mitienda.RegistrarFragment;
import com.profeluismitre.mitienda.VentasFragment;

public class PaginasAdapter extends FragmentStatePagerAdapter {
    int mNumOfTabs;

    public PaginasAdapter(FragmentManager fm, int NumOfTabs) {
        super(fm);
        this.mNumOfTabs = NumOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                PortadaFragment tab0 = new PortadaFragment();
                return tab0;
            case 1:
                RegistrarFragment tab1 = new RegistrarFragment();
                return tab1;
            case 2:
                ConsultarFragment tab2 = new ConsultarFragment();
                return tab2;
            case 3:
                VentasFragment tab3 = new VentasFragment();
                return tab3;
            case 4:
                InventarioFragment tab4 = new InventarioFragment();
                return tab4;
            case 5:
                NuevoUsuarioFragment tab5 = new NuevoUsuarioFragment();
                return tab5;
            case 6:
                AgregarFragment tab6 = new AgregarFragment();
                return tab6;

            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return mNumOfTabs;
    }

Nota: Te marcara error en los nombres de los fragmentos, recuerda que solo cambia en los import el nombre del paquete «com.profeluismitre.mitienda.»  por el nombre de tu paquete

ahora en la clase Java PrincipalActivity.java modificamos el codigo para que podamos cambiar de fragmentos quedando la clase de la siguiente manera:

 public class PrincipalActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {
    ViewPager viewpager;  //objeto para mostrar los fragmentos
    PaginasAdapter adapterpg; //objeto para cambiar de fragmento
    DrawerLayout drawer; //objeto que ´permite mostrar la barra deslizable
    Toolbar toolbar; //Barra donde se pone el icono de la barra deslizable
    ActionBarDrawerToggle toggle; //objeto que permite manipular la Barra deslizable
    NavigationView navigationView; //objeto que me permite elegir en el menu
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(R.layout.activity_principal);
        //agregamos la barra superior
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        //objeto que muestra los fragmentos
        viewpager=(ViewPager) findViewById(R.id.paginador);
        //inicializamos el objeto Pager con la cantidad de ventanas a manipular
        adapterpg=new PaginasAdapter(getSupportFragmentManager(), 7);
        viewpager.setAdapter(adapterpg);
        viewpager.setEnabled(false);
        //objeto que activa la barra de navegacion
        toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
       
    }

    
    /**
     * metodo que decide que hacer dependiendo que opcion del menu elegimos
     *
     */

    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_pricipal) {
            viewpager.setCurrentItem(0);
            toolbar.setTitle("");
        } else if (id == R.id.nav_registrar) {
            viewpager.setCurrentItem(1);
            toolbar.setTitle("Registrar Producto");
        } else if (id == R.id.nav_consultar) {
            viewpager.setCurrentItem(2);
            toolbar.setTitle("Consultar Productos");
        } else if (id == R.id.nav_ventas) {
            viewpager.setCurrentItem(3);
            toolbar.setTitle("Ventas de Producto");
        }else if(id==R.id.nav_inventario){
            viewpager.setCurrentItem(4);
            toolbar.setTitle("Inventario");
        }else if(id==R.id.nav_agregar){
            viewpager.setCurrentItem(6);
            toolbar.setTitle("Agregar Producto");
        }else if(id==R.id.nav_log_exit){
            finish();
        }else if(id==R.id.nav_log_out){
             cerrarSesion();
            finish();
        }else if(id==R.id.nav_nuevoUsuario){
            viewpager.setCurrentItem(5);
            toolbar.setTitle("Nuevo Usuario");
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

Nota: si observamos los cambios solo se hicieron en el metodo onCreate y en el metodo onNavigationItemSelected.

Paso 11.

Para poder continuar tendremos que descargar unas librerías que serán necesarias para que podamos usar la función de escaneo por código de barras la cual la obtenemos de la pagina: https://github.com/zxing/zxing

al descargar el archivo comprimido, extraemos su contenido quedando una carpeta llamada zxing-master la cual abriremos y entraremos a la siguiente ruta:

zxing-master\android-integration\src\main\java\com\google\zxing\integration\android

dentro de esta encontraremos dos archivos llamados: IntentIntegrator e IntentResult los cuales copiaremos seleccionándolos y oprimiendo las teclas de CTRL+C una vez hecho esto nos vamos a nuestro android studio y en la carpeta librerias daremos Click Derecho Pegar y aparecera una ventana como la siguiente en la cual le daremos OK:

con esto se habran copiado las dos clases que son las necesarias para activar el lector de codigo de barras.

Paso 12.

Para poder iniciar con las acciones de cada una de los fragmentos crearemos unas clases que seran de ayuda y de gran utilidad para nuestra aplicación y unos archivos XML para su funcionamiento.  todas las clases serán creadas en la carpeta librerias, y los Archivos XML en la carpeta layout.

Inciamos con los Archivos XML, damos Click derecho sobre la carpeta layout y en New-XML-Layout XML File

Le pondremos el nombre de elementos_lista:

y su código quedaría de la siguiente manera, el cual se utilizara para poder poner la información de los productos dentro de la ListView que se encuentra en Inventario y en Consultar:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center|top">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Codigo:"
            android:textSize="25dp"/>
        <TextView
            android:id="@+id/txtCodLista"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Codigo"
            android:layout_weight="1"
            android:textSize="25dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Descripcion del Producto"
            android:textSize="20dp"/>
        <TextView
            android:id="@+id/txtDescLista"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="a"
            android:textSize="20dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Precio:"
            android:textSize="20dp"/>
        <TextView
            android:id="@+id/txtPrecLista"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Precio"
            android:layout_weight="1"
            android:textSize="20dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:text="Cantidad:"
            android:textSize="20dp"/>
        <TextView
            android:id="@+id/txtCantLista"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Cantidad"
            android:layout_weight="1"
            android:textSize="20dp"/>
    </LinearLayout>


</LinearLayout>

con el mismo procedimiento ahora creamos el archivo XML llamado: elementos_ventas_lista.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center|top">
    <TextView
        android:id="@+id/txtCodVent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Codigo"
        android:textSize="20dp"/>
    <TextView
        android:id="@+id/txtDescVent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="left"
        android:text="DescripcionProducto"
        android:textSize="20dp"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/txtPrecVent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:textSize="20dp"
            android:text="$ 00.00"/>
        <librerias.NoSeleccionableSpinner
            android:id="@+id/spinListVent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:paddingLeft="150dp"
            android:layout_weight="1"
            android:layout_gravity="left">

        </librerias.NoSeleccionableSpinner>
    </LinearLayout>
    <Button
        android:id="@+id/btnAgregarVentas"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Agregar"
        android:textSize="15dp"/>

</LinearLayout>

con el mismo procedimiento ahora creamos el archivo XML llamado: dialogo_buscando.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:gravity="center|top"

    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Buscando"
        android:textStyle="bold"
        android:textSize="20dp"
        android:gravity="center"
        android:textColor="@android:color/holo_green_light"
        android:layout_marginTop="8dp"/>
</LinearLayout>

con el mismo procedimiento ahora creamos el archivo XML llamado: dialogo_grabando.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:gravity="center|top"

    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Grabando Datos"
        android:textStyle="bold"
        android:textSize="20dp"
        android:gravity="center"
        android:textColor="@android:color/holo_green_light"
        android:layout_marginTop="8dp"/>
</LinearLayout>

con el mismo procedimiento ahora creamos el archivo XML llamado: dialogo_verificando.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:gravity="center|top"

    android:orientation="vertical" >

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Verificando Usuario"
        android:textStyle="bold"
        android:textSize="20dp"
        android:gravity="center"
        android:textColor="@android:color/holo_green_light"
        android:layout_marginTop="8dp"/>
</LinearLayout>

con el mismo procedimiento ahora creamos el archivo XML llamado: textview_para_spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:textColor="#000301"
    android:padding="10dp"
    android:textSize="30dp" />

 

ahora crearemos las clases Java iniciamos con Producto dentro de la carpeta Librerias:

Clase Producto:

public class Producto  {
    String codigo;
    String descripcion;
    String precio;
    int cantidad;

    public Producto(String codigo, String descripcion, String precio, int cantidad) {
        this.codigo = codigo;
        this.descripcion = descripcion;
        this.precio = precio;
        this.cantidad = cantidad;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getPrecio() {
        return precio;
    }

    public void setPrecio(String precio) {
        this.precio = precio;
    }

    public int getCantidad() {
        return cantidad;
    }

    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }
}

Clase ListaAdapter:

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import com.profeluismitre.mitienda.R;

public class ListaAdapter  extends ArrayAdapter<Producto> {

    public ListaAdapter(Context context) {
        super(context, R.layout.elementos_lista,R.id.txtCodLista);
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        TextView txtCodigo= (TextView) view.findViewById(R.id.txtCodLista);
        TextView txtDescripcion=(TextView) view.findViewById(R.id.txtDescLista);
        TextView txtPrecio=(TextView) view.findViewById(R.id.txtPrecLista);
        TextView txtCantidad=(TextView) view.findViewById(R.id.txtCantLista);
        Producto prod = getItem(position);
        txtCodigo.setText(prod.getCodigo());
        txtDescripcion.setText(prod.getDescripcion());
        txtPrecio.setText(prod.getPrecio());
        txtCantidad.setText(String.valueOf(prod.getCantidad()));
        return view;
    }


}

Nota: En los import de la clase deberas cambiar el nombre del paquete del Import com.profeluismitre.mitienda.R  por el nombre del paquete de tu proyecto y lo terminas con la R mayuscula.

Clase MiBaseDatos: en esta se creara la base de datos que utilizaremos en nuestra aplicacion.

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MiBaseDatos extends SQLiteOpenHelper {
    private static final String TIPO_VALOR = " TEXT";
    private static final String COMA = ",";
    private static final String TABLA_PRODUCTO =
            "CREATE TABLE productos (codigo TEXT PRIMARY KEY, descripcion TEXT, precio TEXT, cantidad TEXT )";
    private static final String TABLA_USUARIO =
            "CREATE TABLE usuarios (usuario TEXT PRIMARY KEY, password TEXT, tipo TEXT, nombre TEXT, apellidos TEXT )";

    private static final String TABLA_USUARIO_ACTIVO =
            "CREATE TABLE usuarioActivo (usuario TEXT PRIMARY KEY, estatus TEXT, tipo TEXT)";
    private static final String sql_usuario =
            "insert into usuarios values('admon','123','Administrador','Administrador','administrador')";
    private static final String SQL_DELETE_USUARIOS =
            "DROP TABLE IF EXISTS usuarios";
    private static final String SQL_DELETE_PRODUCTOS =
            "DROP TABLE IF EXISTS productos";
    private static final String SQL_DELETE_USUARIO_ACTIVO =
            "DROP TABLE IF EXISTS usuarioActivo";

    public static final int VERSION_DB = 1;
    public static final String NOMBRE_BD = "Tiendita.sqlite";

    public MiBaseDatos(Context context) {
        super(context, NOMBRE_BD, null, VERSION_DB);
    }

    public void onCreate(SQLiteDatabase db) {
        db.execSQL(TABLA_USUARIO);
        db.execSQL(TABLA_PRODUCTO);
        db.execSQL(TABLA_USUARIO_ACTIVO);
        db.execSQL(sql_usuario);
    }

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL(SQL_DELETE_USUARIOS);
        db.execSQL(SQL_DELETE_PRODUCTOS);
        db.execSQL(SQL_DELETE_USUARIO_ACTIVO);
        onCreate(db);
    }
}

Clase NoSeleccionableSpinner:

public class NoSeleccionableSpinner extends android.support.v7.widget.AppCompatSpinner {
    public NoSeleccionableSpinner(Context context) {
        super(context);
    }

    public NoSeleccionableSpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public NoSeleccionableSpinner(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void setPressed(boolean pressed) {
        // Make sure the parent is a View prior casting it to View
        if (pressed && getParent() instanceof View && ((View) getParent()).isPressed()) {
            return;
        }
        super.setPressed(pressed);
    }
}

Clase VentasBaseAdapter:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;
import com.profeluismitre.mitienda.R;

public class VentasBaseAdapter extends BaseAdapter {
    Context contexto;
    ArrayList<Producto> listaproducto;
    LayoutInflater inflater;
    accionBotonVentas listener;

    public VentasBaseAdapter(Context contexto,  ArrayList<Producto> listaproducto, accionBotonVentas listener) {
        this.contexto = contexto;
        this.listaproducto = listaproducto;
        this.listener=listener;
    }

    @Override
    public int getCount() {
        return listaproducto.size();
    }

    @Override
    public Object getItem(int i) {
        return listaproducto.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int posicion, View convertView, ViewGroup parent) {

        TextView codigo;
        TextView descripcion;
        TextView precio;
        final Spinner spinner;
        Button btnAgregar;

        inflater = (LayoutInflater) contexto.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View itemView = inflater.inflate(R.layout.elementos_ventas_lista, parent, false);
        codigo = (TextView) itemView.findViewById(R.id.txtCodVent);
        descripcion = (TextView) itemView.findViewById(R.id.txtDescVent);
        precio = (TextView) itemView.findViewById(R.id.txtPrecVent);
        spinner = (Spinner) itemView.findViewById(R.id.spinListVent);
        btnAgregar=(Button)itemView.findViewById(R.id.btnAgregarVentas);
        List<String> numeros = new ArrayList<String>();
        final Producto prod=listaproducto.get(posicion);
        for (int x = 1; x <= prod.getCantidad(); x++) {
            numeros.add(String.valueOf(x));
        }

        codigo.setText("Codigo: "+prod.getCodigo());
        descripcion.setText(prod.getDescripcion());
        precio.setText("$ " +prod.getPrecio());
        spinner.setPrompt("Cantidad");
        spinner.setAdapter(new ArrayAdapter<String>(contexto, android.R.layout.simple_spinner_item, numeros));

        btnAgregar.setTag(posicion);
        btnAgregar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int cantidad=spinner.getSelectedItemPosition()+1;
                listener.calcularTotal(prod.getCodigo(),cantidad,
                        Double.parseDouble(prod.getPrecio()));
            }
        });
        return itemView;
    }

}

Nota: En los import de la clase deberas cambiar el nombre del paquete del Import com.profeluismitre.mitienda.R  por el nombre del paquete de tu proyecto y lo terminas con la R mayuscula.

Clase Escaneo:

public class Escaneo {
    public static boolean escaneo=false;
    public static String codigo="";
    public static String usuario="";
    public static String tipousuario="";
    public static String nomUsuario="";
    public static String aPUsuario="";
}

Clase (Interface) accionBotonVentas:

a diferencia de las demas clases al poner el nombre de la clase le cambiaremos a interface:

y el código quedaría de la siguiente manera:

public interface accionBotonVentas {
     void calcularTotal(String codigo,int cantidad, double precio);
}

Paso 13.

Ahora ya creamos las clases necesarios, entonces iniciamos con las acciones de los fragmentos empezando por el mas Fácil al Mas Difícil:

Fragmento Inventario

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
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.ListView;
import android.widget.Toast;
import librerias.ListaAdapter;
import librerias.MiBaseDatos;
import librerias.Producto;


public class InventarioFragment extends Fragment {
    //creamos los objetos necesarios
    ListView lista;
    ListaAdapter adaptador;
    MiBaseDatos baseDatos;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_inventario, container, false);
    }
    
    public void onStart(){
        super.onStart();
        //inicializamos los objetos
        lista=(ListView)getView().findViewById(R.id.listaInventario);
        adaptador=new ListaAdapter(getContext());
        //mandamos buscar los porductos existentens en la base de datos
        buscar();
        //una vez buscado insertamos en la lista
        adaptador.notifyDataSetChanged();
        lista.setAdapter(adaptador);
    }
    //metodo que busca los productos en la base de datos
    public void buscar(){
        //inicializamos la base de datos
        baseDatos=new MiBaseDatos(getContext());
        //creamos un objeto para manipular la base de datos de modo lectura
        SQLiteDatabase sqlite=baseDatos.getReadableDatabase();
        //creamos una arreglo con los nombres de las columnos que nos traeremos de la base de datos
        String []columnas={
                "codigo",
                "descripcion",
                "precio",
                "cantidad"};
        //generamos la consulta con el metodo 
        //sqlite.query(nombreBD,Columnas,null,null,null,null,null); todos los demas son null
        //ya que no haremos consulta espesifica..
        Cursor cursor=sqlite.query("productos",columnas,null,null,null,null,null);
        //limpiamos el adaptador antes de insertar para evitar duplicados..
        adaptador.clear();
        if(cursor.getCount()!=0){
            while (cursor.moveToNext()){
                adaptador.add(new Producto(
                        cursor.getString(cursor.getColumnIndex("codigo")),
                        cursor.getString(cursor.getColumnIndex("descripcion")),
                        cursor.getString(cursor.getColumnIndex("precio")),
                        cursor.getInt(cursor.getColumnIndex("cantidad"))));
            }
        }else{
            Toast.makeText(getContext(), "Base de Datos Vacia", Toast.LENGTH_SHORT).show();
        }
        sqlite.close();
    }
}

Fragmento Consultar:

import android.app.ProgressDialog;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
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;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import librerias.ListaAdapter;
import librerias.MiBaseDatos;
import librerias.Producto;

public class ConsultarFragment extends Fragment implements View.OnClickListener {
    // creamos los objetos necesarios
    ListView lista;
    Button btnBuscar;
    EditText txtDescripcion;
    ListaAdapter adaptador;
    MiBaseDatos basedatos;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_consultar, container, false);
    }

    public void onStart(){
        super.onStart();
        //inicializamos los objetos
        lista=(ListView)getView().findViewById(R.id.listaConsultas);
        btnBuscar=(Button)getView().findViewById(R.id.btnBusCons);
        txtDescripcion=(EditText)getView().findViewById(R.id.txtDescConsultar);
        adaptador=new ListaAdapter(getContext());
        //le agregamos accion al btnBuscar
        btnBuscar.setOnClickListener(this);
        adaptador.notifyDataSetChanged();
        //agregamos los elementos a la lista
        lista.setAdapter(adaptador);
    }

    @Override
    public void onClick(View view) {
        //cuando se oprima el boton buscar se ejecuta la tarea asincrona
        if(view.getId()==R.id.btnBusCons){
            new TareaAsincrona().execute();

        }
    }
    //el metodo buscar sera el encargado de buscar todos los productos que coincidan
    public void buscar(String descripcion){
        String descrip;
        //Se inicializa la clase.
        basedatos = new MiBaseDatos(getContext());
        //Se establecen permisos de lectura
        SQLiteDatabase sqlite = basedatos.getReadableDatabase();
        //Columnas que devolverá la consulta.
        String[] columnas = {
                "codigo",
                "descripcion",
                "precio",
                "cantidad" };
        descrip=txtDescripcion.getText().toString();
        //Cláusula WHERE para buscar por producto
        String consulta = "descripcion LIKE '" + descrip  + "%'";
        //Orden de los resultados devueltos por Producto, de forma Descendente alfabéticamente
        String ordenSalida = "codigo DESC";

        if(descrip.equals(""))
        {
            Toast.makeText(getContext(), "Debes Introducir una Descripción.", Toast.LENGTH_LONG).show();
        }else
        {
            //Ejecuta la sentencia devolviendo los resultados de los parámetros pasados de tabla, columnas, producto y orden de los resultados.
            Cursor cursor = sqlite.query("productos", columnas, consulta,null , null, null, null);

            if(cursor.getCount() != 0)
            {
                cursor.moveToFirst();
                adaptador.add(new Producto(
                        cursor.getString(cursor.getColumnIndex("codigo")),
                        cursor.getString(cursor.getColumnIndex("descripcion")),
                        cursor.getString(cursor.getColumnIndex("precio")),
                        cursor.getInt(cursor.getColumnIndex("cantidad"))
                ));
                adaptador.notifyDataSetChanged();
                lista.setAdapter(adaptador);

            }
            else
            {
                Toast.makeText(getContext(), "No Existe ninguna Considencia ", Toast.LENGTH_LONG).show();
            }

        }
        //Se cierra la conexión abierta a la Base de Datos
        sqlite.close();


    }

    // la tarea asincrona es la encargada de mostrar nuestra barra de progreso la cual
    // se muestra por 2 segundos y posteriormente se muestra el resultado obtenido
    private class TareaAsincrona extends AsyncTask<Void, Void, String> {
        private ProgressDialog nDialog;
        public TareaAsincrona() {
            nDialog = new ProgressDialog(getActivity());
        }

        @Override
        protected String doInBackground(Void... voids) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        protected void onPreExecute() {
            nDialog.show();
            nDialog.setContentView(R.layout.dialogo_buscando);
        }

        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            if (nDialog.isShowing()) {
                nDialog.dismiss();
                buscar(txtDescripcion.getText().toString());
            }
        }

    }
}

Fragmento Registrar:

Primeramente para poder hacer funcionar el lector de código de barras agregaremos los siguientes métodos dentro de la clase PrincipalActivity.java:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        // retrieve scan result
        IntentResult scanningResult = IntentIntegrator.parseActivityResult(
                requestCode, resultCode, intent);
        if (scanningResult != null) {
            // we have a result
            String scanContent = scanningResult.getContents();
            Escaneo.codigo=scanContent;
            Escaneo.escaneo=true;

        } else {
            Toast.makeText(getApplicationContext(),
                    "No scan data received!", Toast.LENGTH_SHORT).show();
        }
    }
 public void cerrarSesion(){
        baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sqlite=baseDatos.getWritableDatabase();
        sqlite.delete("usuarioActivo","usuario LIKE '"+ Escaneo.usuario+"'",null);
        sqlite.close();
        Intent miIntento=new Intent(getApplicationContext(),LoginActivity.class);
        startActivity(miIntento);
    }

y remplazaremos el método onBackPressed por lo siguiente:

public void onBackPressed(){
        //super.onBackPressed();

        AlertDialog.Builder dialogo=
                new AlertDialog.Builder(PrincipalActivity.this );
        dialogo.setTitle("Salir de la Aplicación");
        dialogo.setMessage("¿Deseas Salir de la Aplicación o Cerrar Sesión?");
        dialogo.setCancelable(false);
        dialogo.setPositiveButton("Salir App", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });
        dialogo.setNegativeButton("Cerrar Sesion", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                cerrarSesion();
                finish();
            }
        });
        AlertDialog dialogos=dialogo.create();
       dialogos.show();
    }

una vez agregado lo anterior nuestro fragmento quedaría de la manera siguiente:

import android.app.ProgressDialog;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
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;
import android.widget.EditText;
import android.widget.Toast;

import librerias.Escaneo;
import librerias.IntentIntegrator;
import librerias.MiBaseDatos;
import librerias.Producto;


public class RegistrarFragment extends Fragment implements View.OnClickListener {
    //creamos los objetos necesarios para el fragmento
    Button btnScaner, btnGrabar, btnCancelar;
    EditText txtCodigo;
    EditText txtDescripcion;
    EditText txtPrecio;
    EditText txtCantidad;
    MiBaseDatos baseDatos;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_registrar, container, false);
    }
    public void onStart(){
        super.onStart();
        //inicializamos los objetos
        btnScaner=(Button) getView().findViewById(R.id.btnScannerRegistro);
        btnGrabar=(Button) getView().findViewById(R.id.btnGrabarRegistro);
        btnCancelar=(Button) getView().findViewById(R.id.btnCancelarRegistro);
        txtCodigo=(EditText)getView().findViewById(R.id.txtCodigoRegistro);
        txtDescripcion=(EditText)getView().findViewById(R.id.txtDescRegistro);
        txtPrecio=(EditText)getView().findViewById(R.id.txtPrecioRegistro);
        txtCantidad=(EditText)getView().findViewById(R.id.txtCantidadRegistro);
        
        //le asignamos los escuchadores a los botones
        btnScaner.setOnClickListener(this);
        btnGrabar.setOnClickListener(this);

    }

    /**
     * este metodo es el encargado de almacenar los datos del formulario
     * en la base de datos
     */
    public void grabar(){
        //inicializamos el objeto
        baseDatos=new MiBaseDatos(getContext());
        //creamos el manipulador en forma escritura
        SQLiteDatabase sqlDataBase=baseDatos.getWritableDatabase();
        //leemos las cajas de texto y metemos la informacion en variables
        String codigo=txtCodigo.getText().toString();
        String descripcion=txtDescripcion.getText().toString();
        String precio=txtPrecio.getText().toString();
        String cantidad=txtCantidad.getText().toString();
        //creamos un objeto donde empaquetaremos los valores
        ContentValues contenido=new ContentValues();
        //verificamos que no se encuentre ningun dato vacio
        if(codigo.equals("")||descripcion.equals("")||precio.equals("")||cantidad.equals("")){
            Toast.makeText(getContext(), "Favor de LLenar todos los Datos", Toast.LENGTH_SHORT).show();
        }else{
            //si ninguno esta vacio los empaquetamos
            contenido.put("codigo",codigo);
            contenido.put("descripcion",descripcion);
            contenido.put("precio",precio);
            contenido.put("cantidad",cantidad);
            //una ves empaquetado lo mandamos a la base de datos
            //El nombre "productos" es el nombre de la tabla de la base de datos
            sqlDataBase.insertWithOnConflict("productos",null,contenido,SQLiteDatabase.CONFLICT_IGNORE);
            cancelar();
        }
        //cerramos la conexion a la base de datos
        sqlDataBase.close();
    }
    //metodo que limpia todos los campos
    public void cancelar(){
        txtCodigo.setText("");
        txtCantidad.setText("");
        txtPrecio.setText("");
        txtDescripcion.setText("");
        txtCodigo.requestFocus();
        Escaneo.escaneo=false;
    }
//implementacion de las acciones de los botoes
    @Override
    public void onClick(View view) {
        //Se responde al evento click y si el boton oprimido es Scanner
        if(view.getId()==R.id.btnScannerRegistro){
            Escaneo.escaneo=true;
            //Se instancia un objeto de la clase IntentIntegrator
            IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
            //Se procede con el proceso de scaneo
            scanIntegrator.initiateScan();

        }//de lo contrario si el boton es el grabar
        else if(view.getId()==R.id.btnGrabarRegistro){
            new TareaAsincrona().execute();
            
        }// o si el boton oprimido es el cancelar
        else if(view.getId()==R.id.btnCancelarRegistro){
            cancelar();
        }
    }
    //metodo que permite verificar si se escaneo un producto al regresear en si la aplicacion
    public void onResume(){
        super.onResume();
        if(Escaneo.escaneo) {
            txtCodigo.setText(Escaneo.codigo);
            Escaneo.escaneo=false;
        }
    }
//tarea asincrona que realiza la accion de mostrar la barra de progreso y mandar llamar grabar..
    private class TareaAsincrona extends AsyncTask<Void, Void, String> {
        private ProgressDialog nDialog;
        String boton;
        public TareaAsincrona(){
            nDialog = new ProgressDialog(getActivity()); //Here I get an error: The constructor ProgressDialog(PFragment) is undefined
           
        }
        @Override
        protected String doInBackground(Void... voids) {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }

        protected void onPreExecute() {
            nDialog.show();
            nDialog.setContentView(R.layout.dialogo_grabando);


        }

        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (nDialog.isShowing()) {
                nDialog.dismiss();
                grabar();
                cancelar();
            }
        }
    }
}

Fragmento Ventas:

el Fragmento quedaria de la siguiente manera:

import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;

import librerias.Escaneo;
import librerias.IntentIntegrator;
import librerias.MiBaseDatos;
import librerias.Producto;
import librerias.VentasBaseAdapter;
import librerias.accionBotonVentas;


public class VentasFragment extends Fragment implements accionBotonVentas,
        View.OnClickListener { ListView lista;
    //Objetos necesarios 
    VentasBaseAdapter adaptador;
    Button btnScaner, btnCobrar;
    EditText txtCodigo;
    double total=0;
    MiBaseDatos basedatos;
    //arreglos que almacenaran los productos vendidos
    ArrayList<String> codigosVendidos=new ArrayList();
    ArrayList<String> cantidadProductos=new ArrayList();

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_ventas, container, false);
    }
    public void onStart() {
        super.onStart();
        //inicializamos los objetos
        lista=(ListView)getView().findViewById(R.id.listaVentas);
        btnScaner=(Button)getView().findViewById(R.id.btnScanerVentas);
        btnCobrar=(Button)getView().findViewById(R.id.btnCobrarVentas);
        txtCodigo=(EditText)getView().findViewById(R.id.txtCodigoVentas);
        //agregamos los escuchadores a los botones
        btnScaner.setOnClickListener(this);
        btnCobrar.setOnClickListener(this);
        //agregamos una escuchador de teclado en caso que no se use el escaner
        txtCodigo.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                //se verifica la tecla 66 que es Aceptar en el teclado numerico
                if(keyEvent.getKeyCode()==66){
                    new TareaAsincrona().execute();
                }
                return false;
            }
        });

    }

    /**
     * Implementamos la acciones de los botones
     * 
     */
    @Override
    public void onClick(View view) {
        //si el boton oprimido es Scanner
        if(view.getId()==R.id.btnScanerVentas){
            Escaneo.escaneo=true;
            //Se instancia un objeto de la clase IntentIntegrator
            IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
            //Se procede con el proceso de scaneo
            scanIntegrator.initiateScan();

        }//si el botone oprimido es el cobrar
        else if(view.getId()==R.id.btnCobrarVentas){
            AlertDialog.Builder dialogo=
                    new AlertDialog.Builder(getContext());
            dialogo.setTitle("TOTAL A PAGAR");
            dialogo.setMessage("EL Total de la Cuenta es: $"+String.valueOf(total));
            dialogo.setCancelable(false);
            dialogo.setPositiveButton("Cobrar", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    cobrar();
                }
            });
            dialogo.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    cancelar();
                }
            });
            AlertDialog dialogos=dialogo.create();
            dialogos.show();
        }
    }
    //metodo para verificar si se escaneo cuando se presenta nuevamente el fragmento
    public void onResume(){
        super.onResume();
        if(Escaneo.escaneo){
            txtCodigo.setText(Escaneo.codigo);
            Escaneo.escaneo=false;
            new TareaAsincrona().execute();
        }

    }

    /**
     * En este metodo hacemos la busqueda del codigo para mostrarlo en la lista de ventas
     */
    public void buscar(){
        //array para ir almacenando los productos
        ArrayList<Producto> productos=new ArrayList();
        String codigo;
        //Se inicializa la clase.
        basedatos = new MiBaseDatos(getContext());
        //Se establecen permisos de lectura
        SQLiteDatabase sqlite = basedatos.getReadableDatabase();
        //Columnas que devolverá la consulta.
        String[] columnas = {
                "codigo",
                "descripcion",
                "precio",
                "cantidad" };
        codigo=txtCodigo.getText().toString();
        //Cláusula WHERE para buscar por producto
        String consulta = "codigo LIKE '" + codigo  + "%'";
        //Orden de los resultados devueltos por Producto, de forma Descendente alfabéticamente
        String ordenSalida = "codigo DESC";

        if(codigo.equals(""))
        {
            Toast.makeText(getContext(), "Debes Introducir o Escanear un Codigo.", Toast.LENGTH_LONG).show();
        }else
        {
            //Ejecuta la sentencia devolviendo los resultados de los parámetros pasados de tabla, columnas, producto y orden de los resultados.
            Cursor cursor = sqlite.query("productos", columnas, consulta,null , null, null, null);

            if(cursor.getCount() != 0)
            {//nos ponemos en el primer registro
                cursor.moveToFirst();
                //creamos un Producto con los valores de la base de datos
                productos.add(new Producto(
                        cursor.getString(cursor.getColumnIndex("codigo")),
                        cursor.getString(cursor.getColumnIndex("descripcion")),
                        cursor.getString(cursor.getColumnIndex("precio")),
                        cursor.getInt(cursor.getColumnIndex("cantidad"))
                ));
                //agregamos el producto a la lista
                adaptador= new VentasBaseAdapter(getContext(),productos,this);
                adaptador.notifyDataSetChanged();
                lista.setAdapter(adaptador);

            }
            else
            {
                Toast.makeText(getContext(), "No Existe ninguna Considencia ", Toast.LENGTH_LONG).show();
            }

        }
        //Se cierra la conexión abierta a la Base de Datos
        sqlite.close();
    }

    /**
     * Metodo que permitira mostrar el total de los productos y asu vez restara las cantidades vendidas
     */
    public void cobrar(){
        //se inicializa la base de datos
        basedatos=new MiBaseDatos(getContext());
        SQLiteDatabase sqlite=basedatos.getWritableDatabase();
       //se buscan los objetos dentro del arreglo de los productos agregados
        for(int x=0;x<codigosVendidos.size();x++){
            String []columnas={"codigo","cantidad"};
            //se busca el codigo del producto
            String consulta="codigo LIKE '" +codigosVendidos.get(x)+ "'";
            Cursor cursor=sqlite.query("productos",columnas,consulta,null,null,null,null);
            if(cursor.getCount()!=0) {
                if(cursor.moveToNext()){
                    //se restan las cantidades de producto y se modifica la cantidad en la BD
                    int cantidadActual = cursor.getInt(cursor.getColumnIndex("cantidad"));
                    int cantidadTotal = cantidadActual - Integer.parseInt(cantidadProductos.get(x));
                    ContentValues contenido = new ContentValues();
                    contenido.put("cantidad", String.valueOf(cantidadTotal));
                    sqlite.update("productos", contenido, "codigo LIKE '" + codigosVendidos.get(x) + "'", null);
                }

            }
        }
        //cerramos conexion
        sqlite.close();
        cancelar();
    }

    /**
     * metodo que permite limpiar
     */
    public void cancelar(){
        cantidadProductos.removeAll(cantidadProductos);
        codigosVendidos.removeAll(codigosVendidos);
        ArrayList<Producto> productos=new ArrayList();
        adaptador= new VentasBaseAdapter(getContext(),productos,this);
        adaptador.notifyDataSetChanged();
        lista.setAdapter(adaptador);
        Escaneo.escaneo=false;
    }
    //metodo que implementa el boton agregar que acumula las ventas
    public void calcularTotal(String codigo, int cantidad, double precio) {
        double total=cantidad*precio;
        codigosVendidos.add(codigo);
        cantidadProductos.add(String.valueOf(cantidad));
        Toast.makeText(getContext(), "Agregando a Total:"+String.valueOf(total), Toast.LENGTH_SHORT).show();
        this.total=this.total+total;
    }

    /**
     * Tarea que ejecuta el progress al buscar el producto
     */
    private class TareaAsincrona extends AsyncTask<Void, Void, String> {
        private ProgressDialog nDialog;

        public TareaAsincrona(){
            nDialog = new ProgressDialog(getActivity()); 
        }
        @Override
        protected String doInBackground(Void... voids) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }
        protected void onPreExecute() {
            nDialog.show();
            nDialog.setContentView(R.layout.dialogo_buscando);

        }
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (nDialog.isShowing()) {
                nDialog.dismiss();
                buscar();
            }
        }
    }
}

Fragmento NuevoUsuario:

el Fragmento quedaría de la siguiente manera:

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.InputType;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import librerias.MiBaseDatos;

/**
 * Este fragmento nos permite crear nuevos usuarios para la aplicacion
 *
 */
public class NuevoUsuarioFragment extends Fragment implements View.OnClickListener{
    //creamos los objetos necesarios en este fragemento
    EditText txtUsuario, txtPassword, txtNombre, txtApellidos;
    Button btnGrabar, btnCancelar;
    Spinner spinnerTipoUsuario;
    String tipoUsuario;
    MiBaseDatos baseDatos;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_nuevo_usuario, container, false);
    }
    public void onStart(){
        super.onStart();
        //creamos el listado de usuarios que agregaremos al espiner
        final String[] strTiposUsuario = new String[]{
                "Tipo de Usuario..",
                "Administrador",
                "Limitado"};
        //inicializamos los objetos
        spinnerTipoUsuario = (Spinner)getView().findViewById(R.id.spnUsuarioNuevo);
        txtUsuario=(EditText)getView().findViewById(R.id.txtUsuarioNuevo);
        txtPassword=(EditText)getView().findViewById(R.id.txtPassNuevo);
        txtNombre=(EditText)getView().findViewById(R.id.txtNombreNuevo);
        txtApellidos=(EditText)getView().findViewById(R.id.txtApellidoNuevo);
        btnGrabar=(Button)getView().findViewById(R.id.btnGrabarNuevo);
        btnCancelar=(Button)getView().findViewById(R.id.btnCancelarNuevo);
        //creamos el adaptador para el espiner
        ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
                getContext(),R.layout.textview_para_spinner,strTiposUsuario );
       //agregamos la vista para elegir el tipo de letra del espiner
        spinnerArrayAdapter.setDropDownViewResource(R.layout.textview_para_spinner);
        //le agregamos al spinner el listado
        spinnerTipoUsuario.setAdapter(spinnerArrayAdapter);
        //agregamos el escuchador a spinner
        spinnerTipoUsuario.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                tipoUsuario=spinnerTipoUsuario.getSelectedItem().toString();
            }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
            }
        });
        //agregamos los escuchadores a los botones
        btnCancelar.setOnClickListener(this);
        btnGrabar.setOnClickListener(this);

        txtUsuario.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                if(keyEvent.getKeyCode()==66){
                    txtPassword.requestFocus();
                }
                return true;
            }
        });
        txtPassword.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                if(keyEvent.getKeyCode()==66 && txtPassword.getText().length()!=0){
                    txtNombre.requestFocus();
                } return true;
            }
        });
        txtNombre.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                if(keyEvent.getKeyCode()==66 && txtNombre.getText().length()!=0){
                    txtApellidos.requestFocus();
                }return true;
            }
        });

    }
    public void cancelar(){
        txtApellidos.setText("");
        txtPassword.setText("");
        txtNombre.setText("");
        txtUsuario.setText("");
        spinnerTipoUsuario.setSelection(0);
        tipoUsuario="";
    }
    public void grabar(){
        String usuario=txtUsuario.getText().toString();
        String pass=txtPassword.getText().toString();
        String nombre=txtNombre.getText().toString();
        String apellidos=txtApellidos.getText().toString();
        if(usuario.equals("")||pass.equals("")||nombre.equals("")||apellidos.equals("")||tipoUsuario.equals("")){
            Toast.makeText(getContext(),"Favor de Llenar todos los Datos",Toast.LENGTH_LONG).show();
        }else{
            baseDatos=new MiBaseDatos(getContext());
            SQLiteDatabase sql=baseDatos.getWritableDatabase();
            ContentValues contenido=new ContentValues();
            contenido.put("usuario",usuario);
            contenido.put("password",pass);
            contenido.put("tipo",tipoUsuario);
            contenido.put("nombre",nombre);
            contenido.put("apellidos",apellidos);
            sql.insertWithOnConflict("usuarios",null,contenido,SQLiteDatabase.CONFLICT_NONE);
            sql.close();
            cancelar();
            Toast.makeText(getContext(),"Registro Almacenado",Toast.LENGTH_LONG).show();
        }
    }
    @Override
    public void onClick(View view) {
        if(view.getId()==R.id.btnGrabarNuevo){
            grabar();
        }else  if(view.getId()==R.id.btnCancelarNuevo){
            cancelar();
        }
    }


}

 

Fragmento Agregar:

el Fragmento quedaría de la siguiente manera:

import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.AsyncTask;
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;
import android.widget.EditText;
import android.widget.Toast;

import librerias.Escaneo;
import librerias.IntentIntegrator;
import librerias.MiBaseDatos;


public class AgregarFragment extends Fragment implements View.OnClickListener {
   //creamos los objetos necesarios para trabajar
    Button btnScaner, btnGrabar, btnCancelar;
    EditText txtCodigo;
    EditText txtDescripcion;
    EditText txtPrecio;
    EditText txtCantidad;
    MiBaseDatos baseDatos;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_agregar, container, false);
    }

    /**
     * en este metodo inicalizamos los objetos y agregamos los listener a los
     * botones
     */
    public void onStart(){
        super.onStart();
        btnScaner=(Button) getView().findViewById(R.id.btnScannerAgregar);
        btnGrabar=(Button) getView().findViewById(R.id.btnGrabarAgregar);
        btnCancelar=(Button) getView().findViewById(R.id.btnCancelarAgregar);
        txtCodigo=(EditText)getView().findViewById(R.id.txtCodigoAgregar);
        txtDescripcion=(EditText)getView().findViewById(R.id.txtDescAgregar);
        txtPrecio=(EditText)getView().findViewById(R.id.txtPrecioAgregar);
        txtCantidad=(EditText)getView().findViewById(R.id.txtCantidadAgregar);

        btnScaner.setOnClickListener(this);
        btnGrabar.setOnClickListener(this);
        btnCancelar.setOnClickListener(this);

    }

    /**
     *
     * en este metodo definimos las acciones de cada boton de este fragmento
     */
    public void onClick(View view) {
        //Se responde al evento click
        //si se oprime el boton scanner
        if(view.getId()==R.id.btnScannerAgregar){
            Escaneo.escaneo=true;
            //Se instancia un objeto de la clase IntentIntegrator
            IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
            //Se procede con el proceso de scaneo
            scanIntegrator.initiateScan();

        }//si se oprime el boton Grabar
        else if(view.getId()==R.id.btnGrabarAgregar){
            new TareaGrabar().execute();
        }//si se oprime el boton cancelar
         else if(view.getId()==R.id.btnCancelarAgregar){
            cancelar();
        }
    }

    /**
     * en este metodo recuperamos el codigo de barras que se haya escaneado
     * este metodo se activa al volver en si la aplicacion despues de
     * cerrarse la app de escaneo
     */
    public void onResume(){
        super.onResume();
        if(Escaneo.escaneo) {
            txtCodigo.setText(Escaneo.codigo);
            Escaneo.escaneo=false;
            new TareaBuscar().execute();
        }
    }

    /**
     * en este metodo buscamos si el producto ya esta registrado
     */
    public void buscar(){
        baseDatos=new MiBaseDatos(getContext());
        SQLiteDatabase sql =baseDatos.getReadableDatabase();
        String[] columnas={"codigo","descripcion","precio","cantidad"};
        String consulta="codigo LIKE '"+txtCodigo.getText().toString()+"'";
        Cursor cursor=sql.query("productos",columnas,consulta,null,null,null,null);
        if(cursor.getCount()!=0){
            if(cursor.moveToFirst()){
                txtDescripcion.setText(cursor.getString(cursor.getColumnIndex("descripcion")));
                txtPrecio.setText(cursor.getString(cursor.getColumnIndex("precio")));
                txtCantidad.setText(cursor.getString(cursor.getColumnIndex("cantidad")));
            }
        }else{
            Toast.makeText(getContext(), "No Existe Este Producto", Toast.LENGTH_SHORT).show();
        }
        sql.close();
    }

    /**
     * en este metodo modificamos la cantidad de producto existente por la
     * deseemos
     */
    public void grabar(){
        baseDatos=new MiBaseDatos(getContext());
        SQLiteDatabase sqlite=baseDatos.getWritableDatabase();
        String []columnas={"codigo","cantidad"};
        String consulta="codigo LIKE '" +txtCodigo.getText().toString()+ "'";
        Cursor cursor=sqlite.query("productos",columnas,consulta,null,null,null,null);
           if(cursor.getCount()!=0) {
                if(cursor.moveToNext()){
                     ContentValues contenido = new ContentValues();
                    contenido.put("cantidad", txtCantidad.getText().toString());
                    sqlite.update("productos", contenido,consulta, null);
                }
        }
        sqlite.close();

        cancelar();
    }

    /**
     *
     */
    public void cancelar(){
        txtCodigo.setText("");
        txtCantidad.setText("");
        txtPrecio.setText("");
        txtDescripcion.setText("");
        txtCodigo.requestFocus();

    }

    /**
     * esta tarea asincrona nos muestra la barra de dialogo
     * con el mensaje de buscando por un lapso de 3 segundo
     */
    private class TareaBuscar extends AsyncTask<Void, Void, String> {
        private ProgressDialog nDialog;
        public TareaBuscar(){
            nDialog = new ProgressDialog(getActivity());
        }
        @Override
        //accion principal
        protected String doInBackground(Void... voids) {
            try {
                //duracion de la tarea 3000 milisegundos
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }
        //accion antes de iniciar
        protected void onPreExecute() {
            nDialog.show();
            nDialog.setContentView(R.layout.dialogo_buscando);


        }
        //accion despues de ejecutarse la principal
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (nDialog.isShowing()) {
                nDialog.dismiss();
                buscar();
            }
        }
    }

    /**
     * tarea que ejecuta el dialogo con el mensaje de grabando
     */
    private class TareaGrabar extends AsyncTask<Void, Void, String> {
        private ProgressDialog nDialog;
        public TareaGrabar(){
            nDialog = new ProgressDialog(getActivity());
        }
        @Override
        //accion principal
        protected String doInBackground(Void... voids) {
            try {
                //duracion de la ventana 3000 milisegundos
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        }
        //accion previa
        protected void onPreExecute() {
            nDialog.show();
            nDialog.setContentView(R.layout.dialogo_grabando);


        }
        //accion posterior
        protected void onPostExecute(String result) {
            super.onPostExecute(result);

            if (nDialog.isShowing()) {
                nDialog.dismiss();
                grabar();
            }
        }
    }
}

y para Terminar Te pongo el código de como debería haber quedado la clase PrincipalActivity:

import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

import librerias.Escaneo;
import librerias.IntentIntegrator;
import librerias.IntentResult;
import librerias.MiBaseDatos;
import librerias.PaginasAdapter;

public class PrincipalActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {
    ViewPager viewpager;  //objeto para mostrar los fragmentos
    PaginasAdapter adapterpg; //objeto para cambiar de fragmento
    DrawerLayout drawer; //objeto que ´permite mostrar la barra deslizable
    Toolbar toolbar; //Barra donde se pone el icono de la barra deslizable
    ActionBarDrawerToggle toggle; //objeto que permite manipular la Barra deslizable
    NavigationView navigationView; //objeto que me permite elegir en el menu
    MiBaseDatos baseDatos;
    TextView txtDatosUsuario; //texto donde pondremos los datos del usuario
    TextView txtUsuario;//texto donde pondremos el nombre de usuario
    Menu mnNuevoUsuario; //objeto que nos ayudara a ocultar los menus

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        setContentView(R.layout.activity_principal);
        //agregamos la barra superior
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        //objeto que muestra los fragmentos
        viewpager=(ViewPager) findViewById(R.id.paginador);
        //inicializamos el objeto Pager con la cantidad de ventanas a manipular
        adapterpg=new PaginasAdapter(getSupportFragmentManager(), 7);
        viewpager.setAdapter(adapterpg);
        viewpager.setEnabled(false);
        //objeto que activa la barra de navegacion
        toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        //inicializamos los objetos donde pondremos los datos del usuario en la cabecera de la barra
        txtDatosUsuario=(TextView)navigationView.getHeaderView(0).findViewById(R.id.txtDatosNav);
        txtUsuario=(TextView)navigationView.getHeaderView(0).findViewById(R.id.txtUsuarioNav);
        mnNuevoUsuario=navigationView.getMenu();
        //mandamos llamar el metodo que verificara el tipo de usuario
        ponerNombreyVerificarUsuario();



    }

    /**
     * Este metodo verifica el tipo de usuario y activo los menus dependiendo el tipo
     */
    public void ponerNombreyVerificarUsuario(){
        //insertamos los datos del usuario
        txtDatosUsuario.setText(Escaneo.nomUsuario+" "+Escaneo.aPUsuario);
        //ponemos el nombre de usuario
        txtUsuario.setText(Escaneo.usuario);
        // verificamos si el usuario es administrador
        if(Escaneo.tipousuario.equals("Administrador")){
            mnNuevoUsuario.findItem(R.id.nav_nuevoUsuario).setVisible(true);
            mnNuevoUsuario.findItem(R.id.nav_agregar).setVisible(true);
            mnNuevoUsuario.findItem(R.id.nav_registrar).setVisible(true);
        }else{
            mnNuevoUsuario.findItem(R.id.nav_registrar).setVisible(false);
            mnNuevoUsuario.findItem(R.id.nav_nuevoUsuario).setVisible(false);
            mnNuevoUsuario.findItem(R.id.nav_agregar).setVisible(false);
        }
    }

    /**
     *
     * este metodo es el que capta el codigo escaneado por la aplicacion
     * que escanea cuando se cierra
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        // obtenemos el resultado del escaner
        IntentResult scanningResult = IntentIntegrator.parseActivityResult(
                requestCode, resultCode, intent);
        //si el resultado no da null significa que si encontro un codigo
        if (scanningResult != null) {
            // we have a result
            String scanContent = scanningResult.getContents();
            Escaneo.codigo=scanContent;

        } else {
            Toast.makeText(getApplicationContext(),
                    "No Se puedo escanear", Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * este metodo se activa cuando oprimimos el boton del telefono de
     * regresar nos pregunta que si queremos salir de la app o
     * cerrar sesion solamente
     */
    public void onBackPressed(){
        AlertDialog.Builder dialogo=
                new AlertDialog.Builder(PrincipalActivity.this );
        dialogo.setTitle("Salir de la Aplicación");
        dialogo.setMessage("¿Deseas Salir de la Aplicación o Cerrar Sesión?");
        dialogo.setCancelable(false);
        dialogo.setPositiveButton("Salir App", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });
        dialogo.setNegativeButton("Cerrar Sesion", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                cerrarSesion();
                finish();
            }
        });
        AlertDialog dialogos=dialogo.create();
        dialogos.show();
    }

    /**
     * metodo que cierra la sesion y borra el dato de la base de datos
     * para que la proxima vez nos mando a login la ventana splash
     */
    public void cerrarSesion(){
        baseDatos=new MiBaseDatos(getApplicationContext());
        SQLiteDatabase sqlite=baseDatos.getWritableDatabase();
        sqlite.delete("usuarioActivo","usuario LIKE '"+Escaneo.usuario+"'",null);
        sqlite.close();
        Intent miIntento=new Intent(getApplicationContext(),LoginActivity.class);
        startActivity(miIntento);
    }

    /**
     * metodo que decide que hacer dependiendo que opcion del menu elegimos
     *
     */

    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_pricipal) {
            viewpager.setCurrentItem(0);
            toolbar.setTitle("");
        } else if (id == R.id.nav_registrar) {
            viewpager.setCurrentItem(1);
            toolbar.setTitle("Registrar Producto");
        } else if (id == R.id.nav_consultar) {
            viewpager.setCurrentItem(2);
            toolbar.setTitle("Consultar Productos");
        } else if (id == R.id.nav_ventas) {
            viewpager.setCurrentItem(3);
            toolbar.setTitle("Ventas de Producto");
        }else if(id==R.id.nav_inventario){
            viewpager.setCurrentItem(4);
            toolbar.setTitle("Inventario");
        }else if(id==R.id.nav_agregar){
            viewpager.setCurrentItem(6);
            toolbar.setTitle("Agregar Producto");
        }else if(id==R.id.nav_log_exit){
            finish();
        }else if(id==R.id.nav_log_out){
            cerrarSesion();
            finish();
        }else if(id==R.id.nav_nuevoUsuario){
            viewpager.setCurrentItem(5);
            toolbar.setTitle("Nuevo Usuario");
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

 

Fin.. con esto quedaría nuestra aplicación terminada..