{"id":337,"date":"2018-04-06T01:20:04","date_gmt":"2018-04-06T01:20:04","guid":{"rendered":"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/?page_id=337"},"modified":"2018-04-17T18:21:38","modified_gmt":"2018-04-17T18:21:38","slug":"ejemplo-tiendita-con-base-de-datos-y-mas","status":"publish","type":"page","link":"https:\/\/profeluismitre.com.mx\/Ejemplos\/?page_id=337","title":{"rendered":"Ejemplo Tiendita con Base de Datos y mas"},"content":{"rendered":"<h1 style=\"text-align: center;\"><strong>Ejemplo Tiendita Con Base de Datos y mas<\/strong><\/h1>\n<p>Este ejemplo es la continuaci\u00f3n del ejemplo anterior en el cual le agregamos almacenamiento con base de datos mas otras acciones con ella, puedes utilizar la aplicaci\u00f3n de Tiendita sin Base de datos y agregar lo nuevo pero te recomiendo que empieces desde cero..<\/p>\n<p style=\"text-align: center;\">@Autor: Prof. Luis Mitre<\/p>\n<h3><span style=\"color: #ff0000;\"><em><strong>Paso 1.<\/strong><\/em><\/span><\/h3>\n<p>Iniciamos creando un nuevo proyecto en android Studio el cual llamare <strong>MiTiendita:<\/strong><\/p>\n<h1 style=\"text-align: center;\"><strong><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-298\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita1-1-300x191.png\" alt=\"\" width=\"300\" height=\"191\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita1-1-300x191.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita1-1-768x490.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita1-1-1024x653.png 1024w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita1-1.png 1083w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/strong><\/h1>\n<p>Al crear un nuevo proyecto aparecer\u00e1 la imagen anterior.<\/p>\n<ol>\n<li>nombre de la Aplicaci\u00f3n<\/li>\n<li>Paquete de instalaci\u00f3n de la aplicaci\u00f3n en Android, dejar por default el que pone android<\/li>\n<li>Ubicaci\u00f3n del proyecto en la computadora preferentemente poner una ubicaci\u00f3n f\u00e1cil de localizar ya que necesitaremos acceder a ella.<\/li>\n<\/ol>\n<p>Una vez llenado los datos oprimimos <strong>Next\u00a0<\/strong>y aparacera la ventana siguente:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-300 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita2-300x192.png\" alt=\"\" width=\"300\" height=\"192\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita2-300x192.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita2-768x491.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita2-1024x654.png 1024w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita2.png 1080w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>en la cual elegiremos el tipo de actividad que insertaremos por primera vez, es este caso es del tipo <strong>Empty Activity\u00a0<\/strong>la seleccionamos y daremos siguiente:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-301 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita3-300x192.png\" alt=\"\" width=\"300\" height=\"192\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita3-300x192.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita3-768x493.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita3-1024x657.png 1024w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita3.png 1082w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>en la ventana ponemos el nombre que recibir\u00e1 nuestra actividad la cual Llamare\u00a0<strong>VentanaFlashActivity<\/strong>, la cual sera la portada de inicio de nuestra aplicaci\u00f3n.<\/p>\n<h3><em><span style=\"color: #ff0000;\"><strong>Paso 2.\u00a0<\/strong><\/span><\/em><\/h3>\n<p><span style=\"color: #000000;\">Nos ubicaremos con el navegador de Windows en la ubicaci\u00f3n de nuestro proyecto en el cual entraremos a la siguiente ruta:\u00a0 <strong>C:\\UbicacionDelProyecto\\MiTienda\\app\\src\\main\\res\u00a0<\/strong>en el cual encontraras las siguientes carpetas:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-302 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita4-300x169.png\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita4-300x169.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita4-768x432.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita4-1024x576.png 1024w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita4.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p style=\"text-align: center;\">ahora procederemos a crear 5 carpetas con los nombres siguientes:<\/p>\n<ol>\n<li style=\"text-align: left;\">drawable-mdpi<\/li>\n<li>drawable-hdpi<\/li>\n<li>drawable-xhdpi<\/li>\n<li>drawable-xxhdpi<\/li>\n<li>drawable-xxxhdpi<\/li>\n<\/ol>\n<p>las cuales son donde almacen\u00e1ramos las im\u00e1genes que utilizaremos en nuestra aplicaci\u00f3n, quedando de la siguiente manera:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-303 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita5-300x169.png\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita5-300x169.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita5-768x432.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita5-1024x576.png 1024w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita5.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Cabe mencionar que el objetivo de estas carpetas es que debido a que tenemos diferentes tama\u00f1os y resoluciones de dispositivos es necesario poner las im\u00e1genes apropiadas para cada tipo para ello nos apoyaremos con la siguiente tabla:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-304 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/Tama\u00f1o-de-imagenes-AndroidStudio-300x120.png\" alt=\"\" width=\"300\" height=\"120\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/Tama\u00f1o-de-imagenes-AndroidStudio-300x120.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/Tama\u00f1o-de-imagenes-AndroidStudio-768x308.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/Tama\u00f1o-de-imagenes-AndroidStudio.png 902w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>una vez puesto las im\u00e1genes a utilizar para nuestra ventanaSplash procederemos a los siguiente.<\/p>\n<h3><em><strong><span style=\"color: #ff0000;\">Paso 3.\u00a0<\/span><\/strong><\/em><\/h3>\n<p><span style=\"color: #000000;\">Procedemos a poner una imagen en la ventana visual de nuestra actividad que en mi caso se llama: <em><strong>activity_ventana_flash.xml,\u00a0<\/strong><\/em><\/span>quedando el c\u00f3digo de la siguiente manera:<\/p>\n<pre class=\"lang:default decode:true\">&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\r\n    xmlns:tools=\"http:\/\/schemas.android.com\/tools\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:orientation=\"vertical\"\r\n    android:gravity=\"center\"\r\n    tools:context=\"com.profeluismitre.mitienda.VentanaFlashActivity\"&gt;\r\n\r\n    &lt;ImageView\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\" \r\n        android:src=\"@drawable\/fondo\"\/&gt;\r\n &lt;ProgressBar\r\n        android:id=\"@+id\/splash_screen_progress_bar\"\r\n        android:layout_width=\"200dp\"\r\n        android:layout_height=\"wrap_content\"\r\n        style=\"@android:style\/Widget.DeviceDefault.ProgressBar.Horizontal\"\r\n        android:layout_marginTop=\"50dp\" \/&gt;\r\n&lt;\/LinearLayout&gt;<\/pre>\n<p>la cual se observar\u00eda de la siguiente manera:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-305 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita6-300x220.png\" alt=\"\" width=\"300\" height=\"220\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita6-300x220.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita6-768x563.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita6.png 802w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Procederemos a asignarle c\u00f3digo a la parte Java de esta actividad, el cual quedar\u00eda de la siguiente manera:<\/p>\n<pre class=\"width:750 lang:java decode:true\">import android.content.Intent;\r\nimport android.content.pm.ActivityInfo;\r\nimport android.database.Cursor;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.os.Bundle;\r\nimport android.view.Window;\r\nimport android.widget.ProgressBar;\r\nimport librerias.MiBaseDatos;\r\nimport librerias.Escaneo;\r\n\r\npublic class VentanaFlashActivity extends AppCompatActivity {\r\n    public static final long DURACION=3000;\r\n    private ProgressBar mProgress;\r\n    boolean usuarioActivo=false;\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);\r\n        requestWindowFeature(Window.FEATURE_NO_TITLE);\r\n        setContentView(R.layout.activity_ventana_flash);\r\n        mProgress = (ProgressBar) findViewById(R.id.splash_screen_progress_bar);\r\n\r\n        \/\/ iniciamos la tarea de cronometro la cual ejecutara la accion\r\n        new Thread(new Runnable() {\r\n            public void run() {\r\n                doWork();\r\n                startApp();\r\n                finish();\r\n            }\r\n        }).start();\r\n\r\n    }\r\n    \/\/metodo que verifica en la base de datos si esta una sesion iniciada \r\n    public void usuario(){\r\n        MiBaseDatos baseDatos=new MiBaseDatos(getApplicationContext());\r\n        SQLiteDatabase sql=baseDatos.getReadableDatabase();\r\n        String[] columnas={\"usuario\",\"estatus\",\"tipo\"};\r\n\r\n        Cursor cursor= sql.query(\"usuarioActivo\",columnas,null,null,null,null,null,null);\r\n        if(cursor.getCount()!=0){\r\n            if(cursor.moveToFirst()){\r\n                Escaneo.usuario=cursor.getString(cursor.getColumnIndex(\"usuario\"));\r\n                Escaneo.tipousuario=cursor.getString(cursor.getColumnIndex(\"tipo\"));\r\n                usuarioActivo=true;\r\n            }\r\n        }\r\n    }\r\n    \/\/metodo que ejecuta la barra de progreso\r\n    private void doWork() {\r\n        for (int progress=0; progress&lt;100; progress+=10) {\r\n            try {\r\n                Thread.sleep(800);\r\n                usuario();\r\n                mProgress.setProgress(progress);\r\n            } catch (Exception e) {\r\n                e.printStackTrace();\r\n\r\n            }\r\n        }\r\n    }\r\n    \/\/una vez pasado el tiempo se inicia este metodo el cual dependiendo\r\n    \/\/del metodo usuario indicara a que ventana mandarnos\r\n    private void startApp() {\r\n        \/\/si hay una sesion activa nos mandara directamenta a pricipal\r\n        \/\/de no ser asi nos amndara a iniciar sesion\r\n        if(usuarioActivo) {\r\n            Intent intent = new Intent(VentanaFlashActivity.this, PrincipalActivity.class);\r\n            startActivity(intent);\r\n        }else{\r\n            Intent intent = new Intent(VentanaFlashActivity.this, LoginActivity.class);\r\n            startActivity(intent);\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<p>Nota: en caso de que no se quite el titulo de la actividad al ejecutar la aplicaci\u00f3n tendremos que cambiar la herencia de la actividad <strong>VentanaSplashActivity<\/strong> que en mi caso es:\u00a0<span style=\"color: #ff0000;\"><strong>AppCompatActivity<\/strong><\/span> por <span style=\"color: #ff0000;\"><strong>Activity\u00a0<span style=\"color: #000000;\">esto es solo si no se quita el titulo.<\/span><\/strong><\/span><\/p>\n<p>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&#8230;..<\/p>\n<h3><span style=\"color: #ff0000;\"><em><strong>Paso 4.<\/strong><\/em><\/span><\/h3>\n<p>Creamos una nueva actividad pero ahora del tipo <strong>LoginActivity<\/strong> la cual la llamaremos As\u00ed, dando click derecho sobre la Carpeta <strong><span style=\"color: #000000;\">APP<\/span><\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-307 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita7-300x216.png\" alt=\"\" width=\"300\" height=\"216\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita7-300x216.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita7-768x554.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita7.png 818w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-308 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita8-300x242.png\" alt=\"\" width=\"300\" height=\"242\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita8-300x242.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita8-768x619.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita8.png 816w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Una vez creada la activity, como es una actividad pre dise\u00f1ada por android Studio le aremos algunos cambios y borraremos c\u00f3digo que para nuestro ejemplo no necesitaremos.<\/p>\n<p>Empezaremos con la ventana Visual, ingresamos al archivo creado xml llamado <strong>activity_login.xml<\/strong><\/p>\n<p>Primero modificamos la caja de texto de usuario:<\/p>\n<p>C\u00f3digo original:<\/p>\n<pre class=\"height:250 width:250 lang:default decode:true\"> &lt;AutoCompleteTextView\r\n    android:id=\"@+id\/email\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"wrap_content\"\r\n    android:hint=\"@string\/prompt_email\"\r\n    android:inputType=\"textEmailAddress\"\r\n    android:maxLines=\"1\"\r\n    android:singleLine=\"true\" \/&gt;<\/pre>\n<p>C\u00f3digo Modificado:<\/p>\n<pre class=\"lang:default decode:true \"> &lt;AutoCompleteTextView\r\n    android:id=\"@+id\/txtUsuario\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"wrap_content\"\r\n    android:hint=\"Usuario\"\r\n    android:inputType=\"text\"\r\n    android:maxLines=\"1\"\r\n    android:singleLine=\"true\" \/&gt;<\/pre>\n<p>Segundo modificamos la caja de texto de Contrase\u00f1a:<\/p>\n<p>C\u00f3digo Original:<\/p>\n<pre class=\"lang:default decode:true \">&lt;EditText\r\n android:id=\"@+id\/password\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\"\r\n android:hint=\"@string\/prompt_password\"\r\n android:imeActionId=\"@+id\/login\"\r\n android:imeActionLabel=\"@string\/action_sign_in_short\"\r\n android:imeOptions=\"actionUnspecified\"\r\n android:inputType=\"textPassword\"\r\n android:maxLines=\"1\"\r\n android:singleLine=\"true\" \/&gt;<\/pre>\n<p>C\u00f3digo modificado:<\/p>\n<pre class=\"lang:default decode:true \">&lt;EditText\r\n android:id=\"@+id\/txtContrasena\"\r\n android:layout_width=\"match_parent\"\r\n android:layout_height=\"wrap_content\"\r\n android:hint=\"Contrase\u00f1a\"\r\n android:imeActionId=\"@+id\/login\"\r\n android:imeActionLabel=\"@string\/action_sign_in_short\"\r\n android:imeOptions=\"actionUnspecified\"\r\n android:inputType=\"textPassword\"\r\n android:maxLines=\"1\"\r\n android:singleLine=\"true\" \/&gt;<\/pre>\n<p>Por ultimo modificamos el Bot\u00f3n:<\/p>\n<p>C\u00f3digo original:<\/p>\n<pre class=\"lang:default decode:true \"> &lt;Button\r\n  android:id=\"@+id\/email_sign_in_button\"\r\n  style=\"?android:textAppearanceSmall\"\r\n  android:layout_width=\"match_parent\"\r\n  android:layout_height=\"wrap_content\"\r\n  android:layout_marginTop=\"16dp\"\r\n  android:text=\"@string\/action_sign_in\"\r\n  android:textStyle=\"bold\" \/&gt;<\/pre>\n<p>C\u00f3digo modificado:<\/p>\n<pre class=\"lang:default decode:true \">&lt;Button\r\n  android:id=\"@+id\/btnAcceso\"\r\n  style=\"?android:textAppearanceSmall\"\r\n  android:layout_width=\"match_parent\"\r\n  android:layout_height=\"wrap_content\"\r\n  android:layout_marginTop=\"16dp\"\r\n  android:text=\"Ingresar\"\r\n  android:textStyle=\"bold\" \/&gt;<\/pre>\n<h3><span style=\"color: #ff0000;\"><em><strong>Paso 5.<\/strong>\u00a0\u00a0<\/em><\/span><\/h3>\n<p>Ahora en la clase java de esta actividad llamada LoginActivity.java borraremos pr\u00e1cticamente todo el c\u00f3digo que se encuentra en ella quedando de la siguiente manera:<\/p>\n<pre class=\"lang:default decode:true \">public class LoginActivity extends AppCompatActivity{\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_login);\r\n        \r\n    }\r\n}<\/pre>\n<p>Ahora procedemos a darle acciones al bot\u00f3n para validar el usuario, el usuario y contrase\u00f1a estar\u00e1n en una variable, el c\u00f3digo quedara de la siguiente manera:<\/p>\n<pre class=\"lang:default decode:true\">import android.app.ProgressDialog;\r\nimport android.content.ContentValues;\r\nimport android.content.Intent;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.support.design.widget.Snackbar;\r\nimport android.support.v7.app.AppCompatActivity;\r\nimport android.database.Cursor;\r\nimport android.os.AsyncTask;\r\nimport android.os.Bundle;\r\nimport android.view.View;\r\nimport android.view.View.OnClickListener;\r\nimport android.widget.Button;\r\nimport android.widget.EditText;\r\nimport librerias.MiBaseDatos;\r\n\r\n\r\npublic class LoginActivity extends AppCompatActivity{Button btnlogin;\r\n   \/\/creamos los objetos que necesitaremos\r\n    EditText txtUsuario;\r\n    EditText txtPassword;\r\n    MiBaseDatos baseDatos;\r\n    String usuario;\r\n    String tipo;\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_login);\r\n        \/\/inicializamos los objetos\r\n        btnlogin=(Button)findViewById(R.id.btnAcceso);\r\n        txtUsuario=(EditText)findViewById(R.id.txtUsuario);\r\n        txtPassword=(EditText)findViewById(R.id.txtContrasena);\r\n        \/\/damos accional boton acceso el cual manda llamar a un metodo\r\n        btnlogin.setOnClickListener(new OnClickListener() {\r\n            @Override\r\n            public void onClick(View view) {\r\n                acceso(view);\r\n            }\r\n        });\r\n    }\r\n    \/\/metodo que verifica en la base de datos que exista el usuario.\r\n    public void acceso(View v){\r\n        \/\/Se inicializa la clase.\r\n        baseDatos = new MiBaseDatos(getApplicationContext());\r\n        \/\/Se establecen permisos de lectura\r\n        SQLiteDatabase sqlite = baseDatos.getReadableDatabase();\r\n        \/\/Columnas que devolver\u00e1 la consulta.\r\n        String[] columnas = {\r\n                \"usuario\",\r\n                \"password\",\r\n                \"tipo\"};\r\n\r\n        String consulta = \"usuario LIKE '\" +  txtUsuario.getText().toString() + \"'\";\r\n\r\n        if(consulta.equals(\"\"))\r\n        {\r\n            Snackbar.make(v, \"Usuario y\/o Password incorrecto\", Snackbar.LENGTH_LONG)\r\n                    .setAction(\"Action\", null).show();\r\n        }else\r\n        {\r\n            \/\/Ejecuta la sentencia devolviendo los resultados de los par\u00e1metros pasados de tabla, columnas, producto y orden de los resultados.\r\n            Cursor cursor = sqlite.query(\"usuarios\", columnas, consulta,null , null, null, null);\r\n            \/\/se verifica que haya respuesta\r\n            if(cursor.getCount() != 0)\r\n            {\/\/nos ponemos en el primer registro para poder leer\r\n                cursor.moveToFirst();\r\n                \/\/se lee la columna usuario y se almacena el la variable\r\n                usuario=cursor.getString(cursor.getColumnIndex(\"usuario\"));\r\n                \/\/se lee la columno password y se almacena en la variable\r\n                String password=cursor.getString(cursor.getColumnIndex(\"password\"));\r\n                tipo=cursor.getString(cursor.getColumnIndex(\"tipo\"));\r\n                \/\/se verifica que la contrase\u00f1a sea la correcta\r\n                if(password.equals(txtPassword.getText().toString())){\r\n\r\n                    new TareaAsincrona(this).execute();\r\n                }\r\n            }\r\n            else\r\n            {\r\n                Snackbar.make(v, \"Usuario y\/o Password incorrecto\", Snackbar.LENGTH_LONG)\r\n                        .setAction(\"Action\", null).show();\r\n            }\r\n\r\n        }\r\n        \/\/Se cierra la conexi\u00f3n abierta a la Base de Datos\r\n        sqlite.close();\r\n    }\r\n    \/\/una vez verificado e ingresado se almacena la sesion para que en la ventana\r\n    \/\/flash se pueda validar\r\n    public void ingresar(){\r\n        baseDatos=new MiBaseDatos(getApplicationContext());\r\n        SQLiteDatabase sqlite=baseDatos.getWritableDatabase();\r\n        ContentValues contenido=new ContentValues();\r\n        contenido.put(\"usuario\",usuario);\r\n        contenido.put(\"estatus\",\"activo\");\r\n        contenido.put(\"tipo\",tipo);\r\n        sqlite.insert(\"usuarioActivo\",null,contenido);\r\n        sqlite.close();\r\n\r\n\r\n    }\r\n    \/\/tarea que realiza la accion de busqueda\r\n    private class TareaAsincrona extends AsyncTask&lt;Void, Void, String&gt; {\r\n        private ProgressDialog nDialog;\r\n        String boton;\r\n        public TareaAsincrona(LoginActivity activity){\r\n            nDialog = new ProgressDialog(activity); \/\/Here I get an error: The constructor ProgressDialog(PFragment) is undefined\r\n\r\n        }\r\n        @Override\r\n        protected String doInBackground(Void... voids) {\r\n            try {\r\n                Thread.sleep(3000);\r\n            } catch (InterruptedException e) {\r\n                e.printStackTrace();\r\n            }\r\n            return null;\r\n        }\r\n\r\n        protected void onPreExecute() {\r\n            nDialog.show();\r\n            nDialog.setContentView(R.layout.dialogo_verificando);\r\n            ingresar();\r\n\r\n        }\r\n\r\n        protected void onPostExecute(String result) {\r\n            super.onPostExecute(result);\r\n\r\n            if (nDialog.isShowing()) {\r\n                nDialog.dismiss();\r\n                Intent intento = new Intent(getApplicationContext(), PrincipalActivity.class);\r\n                startActivity(intento);\r\n                finish();\r\n            }\r\n        }\r\n    }\r\n}<\/pre>\n<p>Nota: marcara error en algunas partes, este se quitara en el paso siguiente.<\/p>\n<h3><span style=\"color: #ff0000;\"><em><strong>Paso 6.\u00a0<\/strong><\/em><\/span><\/h3>\n<p><span style=\"color: #ff0000;\"><span style=\"color: #000000;\">Crearemos la Actividad Principal la cual sera del tipo <strong>NavigationDrawerActivity <\/strong>la cual llamaremos<strong> PrincipalActivity:<\/strong><\/span><\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-311 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita9-300x224.png\" alt=\"\" width=\"300\" height=\"224\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita9-300x224.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita9.png 767w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-312 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita10-300x240.png\" alt=\"\" width=\"300\" height=\"240\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita10-300x240.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita10-768x614.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita10.png 818w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Ahora procederemos a modificar la actividad para que quede a nuestro gusto empezaremos con modificar la barra lateral de navegacion de esta Actividad:<\/p>\n<p><strong>Paso a:<\/strong> cambiaremos la imagen y titulo de la barra de navegacion en el archivo llamado nav_header_principal.xml ubicado en la carpeta Layaout:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-313 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita11-300x169.png\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita11-300x169.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita11-768x432.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita11-1024x576.png 1024w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita11.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>las flechas rojas indican la ubicaci\u00f3n del archivo y las propiedades que cambiaremos quedando el c\u00f3digo ya modificado de la siguiente manera:<\/p>\n<pre class=\"lang:default decode:true\">&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    xmlns:app=\"http:\/\/schemas.android.com\/apk\/res-auto\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"@dimen\/nav_header_height\"\r\n    android:background=\"@drawable\/side_nav_bar\"\r\n    android:gravity=\"bottom\"\r\n    android:orientation=\"vertical\"\r\n    android:paddingBottom=\"@dimen\/activity_vertical_margin\"\r\n    android:paddingLeft=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingRight=\"@dimen\/activity_horizontal_margin\"\r\n    android:paddingTop=\"@dimen\/activity_vertical_margin\"\r\n    android:theme=\"@style\/ThemeOverlay.AppCompat.Dark\"&gt;\r\n\r\n    &lt;ImageView\r\n        android:id=\"@+id\/imageView\"\r\n        android:layout_width=\"80dp\"\r\n        android:layout_height=\"80dp\"\r\n        android:paddingTop=\"@dimen\/nav_header_vertical_spacing\"\r\n        app:srcCompat=\"@drawable\/barcode\" \/&gt;\r\n\r\n    &lt;TextView\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:paddingTop=\"@dimen\/nav_header_vertical_spacing\"\r\n        android:text=\"MiTiendita\"\r\n        android:textAppearance=\"@style\/TextAppearance.AppCompat.Body1\" \/&gt;\r\n\r\n    &lt;TextView\r\n        android:id=\"@+id\/textView\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:text=\"Profeluismitre.com\/Ejemplos\" \/&gt;\r\n\r\n&lt;\/LinearLayout&gt;<\/pre>\n<p><strong>Paso b:\u00a0<\/strong>ahora cambiaremos las opciones que aparecer\u00e1n en el men\u00fa deslizable, este archivo se encuentra en la carpeta <strong>menu<\/strong> y este se llama <strong>activity_principal_drawer.xml<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-314 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita12-300x169.png\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita12-300x169.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita12-768x432.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita12-1024x576.png 1024w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita12.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>dentro de este estan los menus u opciones las cuales las modificaremos quedando de la siguiente manera:<\/p>\n<pre class=\"lang:default decode:true\">&lt;menu xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"&gt;\r\n\r\n    &lt;group android:checkableBehavior=\"single\"&gt;\r\n        &lt;item\r\n            android:id=\"@+id\/nav_principal\"\r\n            android:icon=\"@drawable\/ic_menu_camera\"\r\n            android:title=\"Principal\" \/&gt;\r\n        &lt;item\r\n            android:id=\"@+id\/nav_registrar\"\r\n            android:icon=\"@drawable\/ic_menu_gallery\"\r\n            android:title=\"Registrar\" \/&gt;\r\n        &lt;item\r\n            android:id=\"@+id\/nav_consultar\"\r\n            android:icon=\"@drawable\/ic_menu_slideshow\"\r\n            android:title=\"Consultar\" \/&gt;\r\n        &lt;item\r\n            android:id=\"@+id\/nav_ventas\"\r\n            android:icon=\"@drawable\/ic_menu_manage\"\r\n            android:title=\"Ventas\" \/&gt;\r\n        &lt;item\r\n            android:id=\"@+id\/nav_inventario\"\r\n            android:icon=\"@drawable\/ic_menu_share\"\r\n            android:title=\"Inventario\" \/&gt;\r\n        &lt;!-- Secci\u00f3n de configuraci\u00f3n --&gt;\r\n        &lt;item\r\n            android:id=\"@+id\/configuration_section\"\r\n            android:title=\"Administraci\u00f3n\"&gt;\r\n            &lt;menu&gt;\r\n                &lt;item\r\n                    android:id=\"@+id\/nav_log_out\"\r\n                    android:icon=\"@drawable\/log_out\"\r\n                    android:title=\"Cerrar Sesion\" \/&gt;\r\n                &lt;item\r\n                    android:id=\"@+id\/nav_log_exit\"\r\n                    android:icon=\"@android:drawable\/btn_dialog\"\r\n                    android:title=\"Salir de la App\" \/&gt;\r\n\r\n            &lt;\/menu&gt;\r\n        &lt;\/item&gt;\r\n    &lt;\/group&gt;\r\n\r\n&lt;\/menu&gt;<\/pre>\n<p><strong>Paso c:\u00a0<\/strong>para evitar que nos marque error nuestra actividad Principal por haber modificado los menus iremos al Archivo <strong>PrincipalActivity.java\u00a0<\/strong>en el cual ubicaremos un metodo llamado:\u00a0<strong>onNavigationItemSelected(MenuItem item)\u00a0<\/strong>el cual modificaremos quedando de la siguiente manera:<\/p>\n<pre class=\"lang:default decode:true\"> public boolean onNavigationItemSelected(MenuItem item) {\r\n        \/\/ Handle navigation view item clicks here.\r\n        int id = item.getItemId();\r\n\r\n        if (id == R.id.nav_principal) {\r\n            \/\/ Handle the camera action\r\n        } else if (id == R.id.nav_registrar) {\r\n\r\n        } else if (id == R.id.nav_consultar) {\r\n\r\n        } else if (id == R.id.nav_ventas) {\r\n\r\n        } else if (id == R.id.nav_inventario) {\r\n\r\n        }else if (id == R.id.nav_log_exit) {\r\n        \r\n        }else if (id == R.id.nav_log_out) {\r\n            \r\n        }\r\n\r\n        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);\r\n        drawer.closeDrawer(GravityCompat.START);\r\n        return true;\r\n    }<\/pre>\n<p>este m\u00e9todo es el que nos ayudara a movernos entre ventanas.<\/p>\n<h3><em><strong><span style=\"color: #ff0000;\">Paso 7.\u00a0\u00a0<\/span><\/strong><\/em><\/h3>\n<p><span style=\"color: #000000;\">Ahora crearemos los fragmentos que ser\u00e1n las subVentanas que pondremos en nuestra actividad principal que son las que har\u00e1n las funciones de nuestra aplicaci\u00f3n.<\/span><\/p>\n<p>Creamos el primer fragmento el cual se llamara PortadaFragment dando click derecho sobre <strong>APP<\/strong> y luego en <strong>fragment<\/strong> y posteriormente en Fragment(Blank):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-316 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita13-300x261.png\" alt=\"\" width=\"300\" height=\"261\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita13-300x261.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita13.png 656w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-317 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita14-300x240.png\" alt=\"\" width=\"300\" height=\"240\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita14-300x240.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita14-768x615.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita14.png 818w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>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\u00f3digo solo quedara lo siguiente:<\/p>\n<pre class=\"lang:default decode:true \">public class PortadaFragment extends Fragment {   \r\n\r\n    @Override\r\n    public View onCreateView(LayoutInflater inflater, ViewGroup container,\r\n                             Bundle savedInstanceState) {\r\n        \/\/ Inflate the layout for this fragment\r\n        return inflater.inflate(R.layout.fragment_portada, container, false);\r\n    }\r\n}<\/pre>\n<p>lo mismo haremos con los fragmentos restantes llamados:<\/p>\n<ol>\n<li>RegistrarFragment<\/li>\n<li>ConsultarFragment<\/li>\n<li>VentasFragment<\/li>\n<li>InventarioFragment<\/li>\n<\/ol>\n<p>aplicando el mismo procedimiento que el anterior.<\/p>\n<h3><span style=\"color: #ff0000;\"><em><strong>Paso 8.<\/strong><\/em><\/span><\/h3>\n<p><span style=\"color: #000000;\">una vez creado todos los fragmentos procederemos a poner los componente visuales en cada fragmento para visualizar en cada ventana:<\/span><\/p>\n<p><strong>Fragmento Portada:<\/strong><\/p>\n<pre class=\"lang:default decode:true\">    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:orientation=\"vertical\"\r\n        android:gravity=\"center|top\"&gt;\r\n\r\n        &lt;TextView\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:text=\"Mi Tiendita\"\r\n            android:gravity=\"center\"\r\n            android:textSize=\"25dp\"\r\n            android:layout_marginTop=\"20dp\"\r\n            \/&gt;\r\n        &lt;ImageView\r\n            android:layout_width=\"200dp\"\r\n            android:layout_height=\"300dp\"\r\n            android:src=\"@drawable\/barcode\"\r\n            android:layout_marginTop=\"25dp\"\/&gt;\r\n        &lt;TextView\r\n            android:layout_marginTop=\"20dp\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:text=\"Hecho por Luis Mitre\"\/&gt;\r\n\r\n\r\n\r\n    &lt;\/LinearLayout&gt;\r\n\r\n<\/pre>\n<p>Nota: el codigo tendras que copiarlo entre las etiquetas de &lt;FrameLayout&gt; y\u00a0&lt;\/FrameLayout&gt; ya que son las que marcan el inicio y el fin del fragmento<\/p>\n<p><strong>Fragmento Registrar:<\/strong><\/p>\n<pre class=\"lang:default decode:true\">&lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:orientation=\"vertical\"\r\n        android:gravity=\"center|top\"&gt;\r\n\r\n        &lt;android.support.design.widget.TextInputLayout\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"&gt;\r\n\r\n            &lt;AutoCompleteTextView\r\n                android:id=\"@+id\/txtCodigoRegistro\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:textSize=\"30dp\"\r\n                android:hint=\"Codigo\"\r\n                android:inputType=\"number\"\r\n                android:maxLines=\"1\"\r\n                android:singleLine=\"true\" \/&gt;\r\n\r\n        &lt;\/android.support.design.widget.TextInputLayout&gt;\r\n\r\n        &lt;Button\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:drawableRight=\"@drawable\/iconoqr\"\r\n            android:drawablePadding=\"8dp\"\r\n            android:id=\"@+id\/btnScannerRegistro\"\r\n            android:textColor=\"@android:color\/black\"\r\n            android:backgroundTint=\"#BBF4FA\"\r\n            android:text=\"Escanear\"\r\n            android:textSize=\"20dp\"\r\n            android:layout_marginTop=\"10dp\"\r\n            android:layout_centerVertical=\"true\"\r\n            android:layout_centerHorizontal=\"true\" \/&gt;\r\n\r\n        &lt;android.support.design.widget.TextInputLayout\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_marginTop=\"15dp\"&gt;\r\n\r\n            &lt;AutoCompleteTextView\r\n                android:id=\"@+id\/txtDescRegistro\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginTop=\"15dp\"\r\n                android:textSize=\"30dp\"\r\n                android:hint=\"Descripci\u00f3n\"\r\n                android:inputType=\"text\"\r\n                android:maxLines=\"1\"\r\n                android:singleLine=\"true\" \/&gt;\r\n\r\n        &lt;\/android.support.design.widget.TextInputLayout&gt;\r\n        &lt;android.support.design.widget.TextInputLayout\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_marginTop=\"15dp\"&gt;\r\n\r\n            &lt;AutoCompleteTextView\r\n                android:id=\"@+id\/txtCantidadRegistro\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginTop=\"15dp\"\r\n                android:textSize=\"30dp\"\r\n                android:hint=\"Cantidad\"\r\n                android:inputType=\"number\"\r\n                android:maxLines=\"1\"\r\n                android:singleLine=\"true\" \/&gt;\r\n\r\n        &lt;\/android.support.design.widget.TextInputLayout&gt;\r\n\r\n        &lt;android.support.design.widget.TextInputLayout\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_marginTop=\"15dp\"&gt;\r\n\r\n            &lt;AutoCompleteTextView\r\n                android:id=\"@+id\/txtPrecioRegistro\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:layout_marginTop=\"15dp\"\r\n                android:textSize=\"30dp\"\r\n                android:hint=\"Precio\"\r\n                android:inputType=\"numberDecimal\"\r\n                android:maxLines=\"1\"\r\n                android:singleLine=\"true\" \/&gt;\r\n\r\n        &lt;\/android.support.design.widget.TextInputLayout&gt;\r\n\r\n        &lt;Button\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:id=\"@+id\/btnGrabarRegistro\"\r\n            android:textColor=\"@android:color\/black\"\r\n            android:backgroundTint=\"#BBF4FA\"\r\n            android:text=\"Grabar\"\r\n            android:textSize=\"20dp\"\r\n            android:layout_marginTop=\"10dp\"\r\n            android:layout_centerVertical=\"true\"\r\n            android:layout_centerHorizontal=\"true\" \/&gt;\r\n        &lt;Button\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:id=\"@+id\/btnCancelarRegistro\"\r\n            android:textColor=\"@android:color\/black\"\r\n            android:backgroundTint=\"#BBF4FA\"\r\n            android:text=\"Cancelar\"\r\n            android:textSize=\"20dp\"\r\n            android:layout_marginTop=\"10dp\"\r\n            android:layout_centerVertical=\"true\"\r\n            android:layout_centerHorizontal=\"true\" \/&gt;\r\n    &lt;\/LinearLayout&gt;<\/pre>\n<p><strong>Fragmento Consultar:<\/strong><\/p>\n<pre class=\"lang:default decode:true\">&lt;LinearLayout\r\n        android:layout_marginTop=\"25dp\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:orientation=\"vertical\"\r\n        android:gravity=\"center|top\"&gt;\r\n\r\n\r\n        &lt;android.support.design.widget.TextInputLayout\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"&gt;\r\n\r\n            &lt;AutoCompleteTextView\r\n                android:id=\"@+id\/txtDescConsultar\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:textSize=\"30dp\"\r\n                android:hint=\"Descripci\u00f3n\"\r\n                android:inputType=\"text\"\r\n                android:maxLines=\"1\"\r\n                android:singleLine=\"true\" \/&gt;\r\n\r\n        &lt;\/android.support.design.widget.TextInputLayout&gt;\r\n\r\n        &lt;Button\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:drawableRight=\"@drawable\/buscartres\"\r\n            android:drawablePadding=\"8dp\"\r\n            android:id=\"@+id\/btnBusCons\"\r\n            android:textColor=\"@android:color\/black\"\r\n            android:backgroundTint=\"#BBF4FA\"\r\n            android:text=\"Buscar\"\r\n            android:textSize=\"20dp\"\r\n            android:layout_marginTop=\"10dp\"\r\n            android:layout_centerVertical=\"true\"\r\n            android:layout_centerHorizontal=\"true\" \/&gt;\r\n\r\n        &lt;ListView\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:paddingTop=\"30dp\"\r\n            android:divider=\"#FFCC00\"\r\n            android:dividerHeight=\"4px\"\r\n            android:id=\"@+id\/listaConsultas\"&gt;\r\n\r\n        &lt;\/ListView&gt;\r\n    &lt;\/LinearLayout&gt;<\/pre>\n<p><strong>Fragmento Ventas:<\/strong><\/p>\n<pre class=\"lang:default decode:true \">&lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:orientation=\"vertical\"\r\n        android:gravity=\"center|top\"\r\n        android:layout_marginTop=\"15dp\"&gt;\r\n\r\n\r\n        &lt;android.support.design.widget.TextInputLayout\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"&gt;\r\n\r\n            &lt;AutoCompleteTextView\r\n                android:id=\"@+id\/txtCodigoVentas\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:textSize=\"30dp\"\r\n                android:hint=\"Codigo\"\r\n                android:inputType=\"number\"\r\n                android:maxLines=\"1\"\r\n                android:singleLine=\"true\" \/&gt;\r\n\r\n        &lt;\/android.support.design.widget.TextInputLayout&gt;\r\n\r\n        &lt;Button\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:drawableRight=\"@drawable\/iconoqr\"\r\n            android:drawablePadding=\"8dp\"\r\n            android:textColor=\"@android:color\/black\"\r\n            android:backgroundTint=\"#BBF4FA\"\r\n            android:text=\"Escanear\"\r\n            android:textSize=\"20dp\"\r\n            android:layout_marginTop=\"10dp\"\r\n            android:layout_centerVertical=\"true\"\r\n            android:layout_centerHorizontal=\"true\"\r\n            android:id=\"@+id\/btnScanerVentas\"\/&gt;\r\n\r\n        &lt;LinearLayout\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:orientation=\"vertical\"\r\n            android:gravity=\"center|top\"\r\n            android:layout_marginTop=\"15dp\"&gt;\r\n            &lt;ListView\r\n                android:id=\"@+id\/listaVentas\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:paddingTop=\"20dp\"\r\n                android:divider=\"#E4E5E4\"\r\n                android:layout_weight=\"10\"\r\n                android:dividerHeight=\"4px\"&gt;\r\n\r\n            &lt;\/ListView&gt;\r\n            &lt;Button\r\n                android:id=\"@+id\/btnCobrarVentas\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"wrap_content\"\r\n                android:drawableRight=\"@drawable\/iconocaja\"\r\n                android:drawablePadding=\"8dp\"\r\n                android:textColor=\"@android:color\/black\"\r\n                android:backgroundTint=\"#BBF4FA\"\r\n                android:text=\"Cobrar\"\r\n                android:textSize=\"20dp\"\r\n                android:layout_marginTop=\"10dp\"\r\n                android:layout_centerVertical=\"true\"\r\n                android:layout_centerHorizontal=\"true\"\/&gt;\r\n        &lt;\/LinearLayout&gt;\r\n\r\n    &lt;\/LinearLayout&gt;<\/pre>\n<p><strong>Fragmento Inventario:<\/strong><\/p>\n<pre class=\"lang:default decode:true\">&lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:orientation=\"vertical\"\r\n        android:gravity=\"center|top\"&gt;\r\n        &lt;ListView\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"match_parent\"\r\n            android:paddingTop=\"30dp\"\r\n            android:divider=\"#FFCC00\"\r\n            android:dividerHeight=\"4px\"\r\n            android:id=\"@+id\/listaInventario\"&gt;\r\n\r\n        &lt;\/ListView&gt;\r\n\r\n    &lt;\/LinearLayout&gt;<\/pre>\n<h3><span style=\"color: #ff0000;\"><em><strong>Paso 9.<\/strong><\/em><\/span><\/h3>\n<p><span style=\"color: #000000;\">Ahora ya que tenemos los fragmentos listo procederemos a crear una clase que es la que nos permitir\u00e1 insertar los fragmentos en la Actividad Principal para ello crearemos un paquete llamado <strong>Librerias\u00a0<\/strong>:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-319 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita15-300x300.png\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita15-300x300.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita15-150x150.png 150w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita15.png 513w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-320 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita16-268x300.png\" alt=\"\" width=\"268\" height=\"300\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita16-268x300.png 268w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita16.png 410w\" sizes=\"auto, (max-width: 268px) 100vw, 268px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-321 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita17-300x106.png\" alt=\"\" width=\"300\" height=\"106\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita17-300x106.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita17.png 436w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>ahora dentro del paquete <b>librer\u00edas<\/b>\u00a0creamos la clase llamada\u00a0 \u00a0<strong>NonSwipeableViewPager <\/strong>la cual nos permitir\u00e1 insertar los fragmentos a nuestra actividad<img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-322 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita18-300x300.png\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita18-300x300.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita18-150x150.png 150w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita18.png 554w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-323 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita19-300x244.png\" alt=\"\" width=\"300\" height=\"244\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita19-300x244.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita19.png 547w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>una vez creada la clase pondremos el siguiente c\u00f3digo:<\/p>\n<pre class=\"lang:default decode:true \">public class NonSwipeableViewPager extends ViewPager {\r\n\r\n    public NonSwipeableViewPager(Context context) {\r\n        super(context);\r\n        setMyScroller();\r\n    }\r\n\r\n    public NonSwipeableViewPager(Context context, AttributeSet attrs) {\r\n        super(context, attrs);\r\n        setMyScroller();\r\n    }\r\n\r\n    @Override\r\n    public boolean onInterceptTouchEvent(MotionEvent event) {\r\n        \/\/ Never allow swiping to switch between pages\r\n        return false;\r\n    }\r\n\r\n    @Override\r\n    public boolean onTouchEvent(MotionEvent event) {\r\n        \/\/ Never allow swiping to switch between pages\r\n        return false;\r\n    }\r\n\r\n    \/\/down one is added for smooth scrolling\r\n\r\n    private void setMyScroller() {\r\n        try {\r\n            Class&lt;?&gt; viewpager = ViewPager.class;\r\n            Field scroller = viewpager.getDeclaredField(\"mScroller\");\r\n            scroller.setAccessible(true);\r\n            scroller.set(this, new MyScroller(getContext()));\r\n        } catch (Exception e) {\r\n            e.printStackTrace();\r\n        }\r\n    }\r\n\r\n    public class MyScroller extends Scroller {\r\n        public MyScroller(Context context) {\r\n            super(context, new DecelerateInterpolator());\r\n        }\r\n\r\n        @Override\r\n        public void startScroll(int startX, int startY, int dx, int dy, int duration) {\r\n            super.startScroll(startX, startY, dx, dy, 350 \/*1 secs*\/);\r\n        }\r\n    }\r\n}<\/pre>\n<p>ahora en el archivo xml llamada <strong>contentPrincipal<\/strong> en la carpeta <strong>layout<\/strong> agregamos el siguiente componente que es la clase que creamos:<\/p>\n<pre class=\"lang:default decode:true \">&lt;librerias.NonSwipeableViewPager\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:id=\"@+id\/paginador\"&gt;\r\n    &lt;\/librerias.NonSwipeableViewPager&gt;<\/pre>\n<h3><span style=\"color: #ff0000;\">Paso 10.<\/span><\/h3>\n<p><span style=\"color: #000000;\">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\u00e1 estar cambi\u00e1ndolos, esta clase sera llamada <strong>PaginasAdapter<\/strong> y la crearemos dentro del paquete <strong>librerias<\/strong>. la cual quedar\u00eda de la siguiente manera:<\/span><\/p>\n<pre class=\"lang:default decode:true\">public class PaginasAdapter extends FragmentStatePagerAdapter {\r\n    int mNumOfTabs;\r\n\r\n    public PaginasAdapter(FragmentManager fm, int NumOfTabs) {\r\n        super(fm);\r\n        this.mNumOfTabs = NumOfTabs;\r\n    }\r\n\r\n    @Override\r\n    public Fragment getItem(int position) {\r\n\r\n        switch (position) {\r\n            case 0:\r\n                PortadaFragment tab0 = new PortadaFragment();\r\n                return tab0;\r\n            case 1:\r\n                RegistrarFragment tab1 = new RegistrarFragment();\r\n                return tab1;\r\n            case 2:\r\n                ConsultarFragment tab2 = new ConsultarFragment();\r\n                return tab2;\r\n            case 3:\r\n                VentasFragment tab3 = new VentasFragment();\r\n                return tab3;\r\n            case 4:\r\n                InventarioFragment tab4 = new InventarioFragment();\r\n                return tab4;\r\n\r\n            default:\r\n                return null;\r\n        }\r\n    }\r\n\r\n    @Override\r\n    public int getCount() {\r\n        return mNumOfTabs;\r\n    }<\/pre>\n<p>Nota: te\u00a0 marcara error en los nombres de los fragmentos, recuerda que solo hay que importarlos.<\/p>\n<p>ahora en la clase Java <strong>PrincipalActivity.java\u00a0<\/strong>modificamos el codigo para que podamos cambiar de fragmentos quedando la clase de la siguiente manera:<\/p>\n<pre class=\"lang:default decode:true\"> ViewPager viewpager;  \/\/objeto para mostrar los fragmentos\r\n    PaginasAdapter adapterpg; \/\/objeto para cambiar de fragmento\r\n    DrawerLayout drawer; \/\/objeto que \u00b4permite mostrar la barra deslizable\r\n    Toolbar toolbar; \/\/Barra donde se pone el icono de la barra deslizable\r\n    ActionBarDrawerToggle toggle; \/\/objeto que permite manipular la Barra deslizable\r\n    NavigationView navigationView; \/\/objeto que me permite elegir en el menu\r\n\r\n    @Override\r\n    protected void onCreate(Bundle savedInstanceState) {\r\n        super.onCreate(savedInstanceState);\r\n        setContentView(R.layout.activity_principal);\r\n        toolbar = (Toolbar) findViewById(R.id.toolbar);\r\n        setSupportActionBar(toolbar);\r\n\r\n\r\n\r\n        drawer = (DrawerLayout) findViewById(R.id.drawer_layout);\r\n\r\n        viewpager=(ViewPager) findViewById(R.id.paginador);\r\n        \/\/inicializamos el objeto Pager con la cantidad de ventanas a manipular\r\n        adapterpg=new PaginasAdapter(getSupportFragmentManager(), 5);\r\n        viewpager.setAdapter(adapterpg);\r\n        viewpager.setEnabled(false);\r\n        \r\n        toggle = new ActionBarDrawerToggle(\r\n                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);\r\n        drawer.setDrawerListener(toggle);\r\n        toggle.syncState();\r\n\r\n        navigationView = (NavigationView) findViewById(R.id.nav_view);\r\n        navigationView.setNavigationItemSelectedListener(this);\r\n    }\r\n\r\n    @Override\r\n    public void onBackPressed() {\r\n        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);\r\n        if (drawer.isDrawerOpen(GravityCompat.START)) {\r\n            drawer.closeDrawer(GravityCompat.START);\r\n        } else {\r\n            super.onBackPressed();\r\n        }\r\n    }\r\n\r\n    @Override\r\n    public boolean onCreateOptionsMenu(Menu menu) {\r\n        \/\/ Inflate the menu; this adds items to the action bar if it is present.\r\n        getMenuInflater().inflate(R.menu.principal, menu);\r\n        return true;\r\n    }\r\n\r\n    @Override\r\n    public boolean onOptionsItemSelected(MenuItem item) {\r\n        \/\/ Handle action bar item clicks here. The action bar will\r\n        \/\/ automatically handle clicks on the Home\/Up button, so long\r\n        \/\/ as you specify a parent activity in AndroidManifest.xml.\r\n        int id = item.getItemId();\r\n\r\n        \/\/noinspection SimplifiableIfStatement\r\n        if (id == R.id.action_settings) {\r\n            return true;\r\n        }\r\n\r\n        return super.onOptionsItemSelected(item);\r\n    }\r\n\r\n    @SuppressWarnings(\"StatementWithEmptyBody\")\r\n    @Override\r\n    public boolean onNavigationItemSelected(MenuItem item) {\r\n        \/\/ Handle navigation view item clicks here.\r\n        int id = item.getItemId();\r\n\r\n        if (id == R.id.nav_principal) {\r\n          viewpager.setCurrentItem(0);\r\n          toolbar.setTitle(\"Portada\");\r\n        } else if (id == R.id.nav_registrar) {\r\n            viewpager.setCurrentItem(1);\r\n            toolbar.setTitle(\"Registrar\");\r\n        } else if (id == R.id.nav_consultar) {\r\n            viewpager.setCurrentItem(2);\r\n            toolbar.setTitle(\"Consultar\");\r\n        } else if (id == R.id.nav_ventas) {\r\n            viewpager.setCurrentItem(3);\r\n            toolbar.setTitle(\"Ventas\");\r\n        } else if (id == R.id.nav_inventario) {\r\n            viewpager.setCurrentItem(4);\r\n            toolbar.setTitle(\"Inventario\");\r\n        }else if (id == R.id.nav_log_exit) {\r\n            finish();\r\n        }else if (id == R.id.nav_log_out) {\r\n            cerrarSesion();\r\n            finish();\r\n        }\r\n\r\n        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);\r\n        drawer.closeDrawer(GravityCompat.START);\r\n        return true;\r\n    }<\/pre>\n<p>Nota: si observamos los cambios solo se hicieron en el metodo <strong>onCreate<\/strong> y en el metodo <strong>onNavigationItemSelected.<\/strong><\/p>\n<h3><span style=\"color: #ff0000;\">Paso 11.<\/span><\/h3>\n<p><span style=\"color: #000000;\">Para poder continuar tendremos que descargar unas librer\u00edas que ser\u00e1n necesarias para que podamos usar la funci\u00f3n de escaneo por c\u00f3digo de barras la cual la obtenemos de la pagina:\u00a0<a href=\"https:\/\/github.com\/zxing\/zxing\">https:\/\/github.com\/zxing\/zxing<\/a><\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-324 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita20-300x169.png\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita20-300x169.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita20-768x432.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita20-1024x576.png 1024w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita20.png 1366w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>al descargar el archivo comprimido, extraemos su contenido quedando una carpeta llamada <strong>zxing-master <\/strong>la cual abriremos y entraremos a la siguiente ruta:<\/p>\n<p><strong>zxing-master\\android-integration\\src\\main\\java\\com\\google\\zxing\\integration\\android<\/strong><\/p>\n<p>dentro de esta encontraremos dos archivos llamados: <strong>IntentIntegrator<\/strong> e <strong>IntentResult\u00a0<\/strong>los cuales copiaremos seleccion\u00e1ndolos y oprimiendo las teclas de <strong>CTRL+C\u00a0<\/strong>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 <strong>OK<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-325 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita21-300x112.png\" alt=\"\" width=\"300\" height=\"112\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita21-300x112.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita21.png 570w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>con esto se habran copiado las dos clases que son las necesarias para activar el lector de codigo de barras.<\/p>\n<h3><span style=\"color: #ff0000;\"><strong>Paso 12.<\/strong><\/span><\/h3>\n<p>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\u00f3n y unos archivos XML para su funcionamiento.\u00a0 todas las clases ser\u00e1n creadas en la carpeta <strong>librerias,<\/strong> y los Archivos <strong>XML<\/strong> en la carpet<strong>a layout.<\/strong><\/p>\n<p>Inciamos con los Archivos XML, damos Click derecho sobre la carpeta layout y en <strong>New-XML-Layout XML File<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-326 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita22-300x268.png\" alt=\"\" width=\"300\" height=\"268\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita22-300x268.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita22.png 602w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Le pondremos el nombre de elementos_lista:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-327 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita23-300x239.png\" alt=\"\" width=\"300\" height=\"239\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita23-300x239.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita23-768x613.png 768w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita23.png 818w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>y su c\u00f3digo quedar\u00eda de la siguiente manera, el cual se utilizara para poder poner la informaci\u00f3n de los productos dentro de la ListView que se encuentra en <strong>Inventario<\/strong> y en <strong>Consultar<\/strong>:<\/p>\n<pre class=\"lang:default decode:true\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:orientation=\"vertical\"\r\n    android:gravity=\"center|top\"&gt;\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"&gt;\r\n        &lt;TextView\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:gravity=\"left\"\r\n            android:text=\"Codigo:\"\r\n            android:textSize=\"25dp\"\/&gt;\r\n        &lt;TextView\r\n            android:id=\"@+id\/txtCodLista\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:gravity=\"center\"\r\n            android:text=\"Codigo\"\r\n            android:layout_weight=\"1\"\r\n            android:textSize=\"25dp\"\/&gt;\r\n    &lt;\/LinearLayout&gt;\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:orientation=\"vertical\"&gt;\r\n        &lt;TextView\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:gravity=\"left\"\r\n            android:text=\"Descripcion del Producto\"\r\n            android:textSize=\"20dp\"\/&gt;\r\n        &lt;TextView\r\n            android:id=\"@+id\/txtDescLista\"\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:gravity=\"center\"\r\n            android:text=\"a\"\r\n            android:textSize=\"20dp\"\/&gt;\r\n    &lt;\/LinearLayout&gt;\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"&gt;\r\n        &lt;TextView\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:gravity=\"left\"\r\n            android:text=\"Precio:\"\r\n            android:textSize=\"20dp\"\/&gt;\r\n        &lt;TextView\r\n            android:id=\"@+id\/txtPrecLista\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:gravity=\"center\"\r\n            android:text=\"Precio\"\r\n            android:layout_weight=\"1\"\r\n            android:textSize=\"20dp\"\/&gt;\r\n    &lt;\/LinearLayout&gt;\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"&gt;\r\n        &lt;TextView\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:gravity=\"left\"\r\n            android:text=\"Cantidad:\"\r\n            android:textSize=\"20dp\"\/&gt;\r\n        &lt;TextView\r\n            android:id=\"@+id\/txtCantLista\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:gravity=\"center\"\r\n            android:text=\"Cantidad\"\r\n            android:layout_weight=\"1\"\r\n            android:textSize=\"20dp\"\/&gt;\r\n    &lt;\/LinearLayout&gt;\r\n\r\n\r\n&lt;\/LinearLayout&gt;<\/pre>\n<p>con el mismo procedimiento ahora creamos el archivo XML llamado: <strong>elementos_ventas_lista.xml<\/strong><\/p>\n<pre class=\"lang:default decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:orientation=\"vertical\"\r\n    android:gravity=\"center|top\"&gt;\r\n    &lt;TextView\r\n        android:id=\"@+id\/txtCodVent\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:gravity=\"center\"\r\n        android:text=\"Codigo\"\r\n        android:textSize=\"20dp\"\/&gt;\r\n    &lt;TextView\r\n        android:id=\"@+id\/txtDescVent\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:gravity=\"left\"\r\n        android:text=\"DescripcionProducto\"\r\n        android:textSize=\"20dp\"\/&gt;\r\n    &lt;LinearLayout\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"wrap_content\"&gt;\r\n        &lt;TextView\r\n            android:id=\"@+id\/txtPrecVent\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:gravity=\"left\"\r\n            android:textSize=\"20dp\"\r\n            android:text=\"$ 00.00\"\/&gt;\r\n        &lt;librerias.NoSeleccionableSpinner\r\n            android:id=\"@+id\/spinListVent\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:textSize=\"20dp\"\r\n            android:paddingLeft=\"150dp\"\r\n            android:layout_weight=\"1\"\r\n            android:layout_gravity=\"left\"&gt;\r\n\r\n        &lt;\/librerias.NoSeleccionableSpinner&gt;\r\n    &lt;\/LinearLayout&gt;\r\n    &lt;Button\r\n        android:id=\"@+id\/btnAgregarVentas\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:text=\"Agregar\"\r\n        android:textSize=\"15dp\"\/&gt;\r\n\r\n&lt;\/LinearLayout&gt;<\/pre>\n<p>con el mismo procedimiento ahora creamos el archivo XML llamado: <strong>dialogo_buscando.xml<\/strong><\/p>\n<pre class=\"lang:default decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"100dp\"\r\n    android:gravity=\"center|top\"\r\n\r\n    android:orientation=\"vertical\" &gt;\r\n\r\n    &lt;ProgressBar\r\n        android:id=\"@+id\/progressBar\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_gravity=\"center_horizontal\"\/&gt;\r\n\r\n    &lt;TextView\r\n        android:id=\"@+id\/textView1\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:text=\"Buscando\"\r\n        android:textStyle=\"bold\"\r\n        android:textSize=\"20dp\"\r\n        android:gravity=\"center\"\r\n        android:textColor=\"@android:color\/holo_green_light\"\r\n        android:layout_marginTop=\"8dp\"\/&gt;\r\n&lt;\/LinearLayout&gt;<\/pre>\n<p>con el mismo procedimiento ahora creamos el archivo XML llamado: <strong>dialogo_grabando.xml<\/strong><\/p>\n<pre class=\"lang:default decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"100dp\"\r\n    android:gravity=\"center|top\"\r\n\r\n    android:orientation=\"vertical\" &gt;\r\n\r\n    &lt;ProgressBar\r\n        android:id=\"@+id\/progressBar\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_gravity=\"center_horizontal\"\/&gt;\r\n\r\n    &lt;TextView\r\n        android:id=\"@+id\/textView1\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:text=\"Grabando Datos\"\r\n        android:textStyle=\"bold\"\r\n        android:textSize=\"20dp\"\r\n        android:gravity=\"center\"\r\n        android:textColor=\"@android:color\/holo_green_light\"\r\n        android:layout_marginTop=\"8dp\"\/&gt;\r\n&lt;\/LinearLayout&gt;<\/pre>\n<p>con el mismo procedimiento ahora creamos el archivo XML llamado: <strong>dialogo_verificando.xml<\/strong><\/p>\n<pre class=\"lang:default decode:true \">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\r\n&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"100dp\"\r\n    android:gravity=\"center|top\"\r\n\r\n    android:orientation=\"vertical\" &gt;\r\n\r\n    &lt;ProgressBar\r\n        android:id=\"@+id\/progressBar\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:layout_gravity=\"center_horizontal\"\/&gt;\r\n\r\n    &lt;TextView\r\n        android:id=\"@+id\/textView1\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"wrap_content\"\r\n        android:text=\"Verificando Usuario\"\r\n        android:textStyle=\"bold\"\r\n        android:textSize=\"20dp\"\r\n        android:gravity=\"center\"\r\n        android:textColor=\"@android:color\/holo_green_light\"\r\n        android:layout_marginTop=\"8dp\"\/&gt;\r\n&lt;\/LinearLayout&gt;<\/pre>\n<p>ahora crearemos las clases Java iniciamos con Producto:<\/p>\n<p><strong>Clase Producto:<\/strong><\/p>\n<pre class=\"lang:default decode:true \">public class Producto  {\r\n    String codigo;\r\n    String descripcion;\r\n    String precio;\r\n    int cantidad;\r\n\r\n    public Producto(String codigo, String descripcion, String precio, int cantidad) {\r\n        this.codigo = codigo;\r\n        this.descripcion = descripcion;\r\n        this.precio = precio;\r\n        this.cantidad = cantidad;\r\n    }\r\n\r\n    public String getCodigo() {\r\n        return codigo;\r\n    }\r\n\r\n    public void setCodigo(String codigo) {\r\n        this.codigo = codigo;\r\n    }\r\n\r\n    public String getDescripcion() {\r\n        return descripcion;\r\n    }\r\n\r\n    public void setDescripcion(String descripcion) {\r\n        this.descripcion = descripcion;\r\n    }\r\n\r\n    public String getPrecio() {\r\n        return precio;\r\n    }\r\n\r\n    public void setPrecio(String precio) {\r\n        this.precio = precio;\r\n    }\r\n\r\n    public int getCantidad() {\r\n        return cantidad;\r\n    }\r\n\r\n    public void setCantidad(int cantidad) {\r\n        this.cantidad = cantidad;\r\n    }\r\n}<\/pre>\n<p><strong>Clase ListaAdapter:<\/strong><\/p>\n<pre class=\"lang:default decode:true\">import android.content.Context;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.ArrayAdapter;\r\nimport android.widget.TextView;\r\n\r\nimport com.profeluismitre.mitienda.R;\r\n\r\npublic class ListaAdapter  extends ArrayAdapter&lt;Producto&gt; {\r\n\r\n    public ListaAdapter(Context context) {\r\n        super(context, R.layout.elementos_lista,R.id.txtCodLista);\r\n    }\r\n    public View getView(int position, View convertView, ViewGroup parent) {\r\n        View view = super.getView(position, convertView, parent);\r\n        TextView txtCodigo= (TextView) view.findViewById(R.id.txtCodLista);\r\n        TextView txtDescripcion=(TextView) view.findViewById(R.id.txtDescLista);\r\n        TextView txtPrecio=(TextView) view.findViewById(R.id.txtPrecLista);\r\n        TextView txtCantidad=(TextView) view.findViewById(R.id.txtCantLista);\r\n        Producto prod = getItem(position);\r\n        txtCodigo.setText(prod.getCodigo());\r\n        txtDescripcion.setText(prod.getDescripcion());\r\n        txtPrecio.setText(prod.getPrecio());\r\n        txtCantidad.setText(String.valueOf(prod.getCantidad()));\r\n        return view;\r\n    }\r\n\r\n\r\n}<\/pre>\n<p>Nota: En los import de la clase deberas cambiar el nombre del paquete del Import com.profeluismitre.mitienda.R\u00a0 por el nombre del paquete de tu proyecto y lo terminas con la R mayuscula.<\/p>\n<p><strong>Clase MiBaseDatos: <\/strong>en esta se creara la base de datos que utilizaremos en nuestra aplicacion.<\/p>\n<pre class=\"lang:default decode:true\">import android.content.Context;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.database.sqlite.SQLiteOpenHelper;\r\n\r\npublic class MiBaseDatos extends SQLiteOpenHelper {\r\n    private static final String TIPO_VALOR = \" TEXT\";\r\n    private static final String COMA = \",\";\r\n    private static final String TABLA_PRODUCTO =\r\n            \"CREATE TABLE productos (codigo TEXT PRIMARY KEY, descripcion TEXT, precio TEXT, cantidad TEXT )\";\r\n    private static final String TABLA_USUARIO =\r\n            \"CREATE TABLE usuarios (usuario TEXT PRIMARY KEY, password TEXT, tipo TEXT, nombre TEXT, apellidos TEXT )\";\r\n\r\n    private static final String TABLA_USUARIO_ACTIVO =\r\n            \"CREATE TABLE usuarioActivo (usuario TEXT PRIMARY KEY, estatus TEXT, tipo TEXT)\";\r\n    private static final String sql_usuario =\r\n            \"insert into usuarios values('admon','123','1','Administrador','administrador')\";\r\n    private static final String SQL_DELETE_USUARIOS =\r\n            \"DROP TABLE IF EXISTS usuarios\";\r\n    private static final String SQL_DELETE_PRODUCTOS =\r\n            \"DROP TABLE IF EXISTS productos\";\r\n    private static final String SQL_DELETE_USUARIO_ACTIVO =\r\n            \"DROP TABLE IF EXISTS usuarioActivo\";\r\n\r\n    public static final int VERSION_DB = 1;\r\n    public static final String NOMBRE_BD = \"Tiendita.sqlite\";\r\n\r\n    public MiBaseDatos(Context context) {\r\n        super(context, NOMBRE_BD, null, VERSION_DB);\r\n    }\r\n\r\n    public void onCreate(SQLiteDatabase db) {\r\n        db.execSQL(TABLA_USUARIO);\r\n        db.execSQL(TABLA_PRODUCTO);\r\n        db.execSQL(TABLA_USUARIO_ACTIVO);\r\n        db.execSQL(sql_usuario);\r\n    }\r\n\r\n    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {\r\n        db.execSQL(SQL_DELETE_USUARIOS);\r\n        db.execSQL(SQL_DELETE_PRODUCTOS);\r\n        db.execSQL(SQL_DELETE_USUARIO_ACTIVO);\r\n        onCreate(db);\r\n    }\r\n}<\/pre>\n<p><strong>Clase NoSeleccionableSpinner:<\/strong><\/p>\n<pre class=\"lang:default decode:true \">public class NoSeleccionableSpinner extends android.support.v7.widget.AppCompatSpinner {\r\n    public NoSeleccionableSpinner(Context context) {\r\n        super(context);\r\n    }\r\n\r\n    public NoSeleccionableSpinner(Context context, AttributeSet attrs) {\r\n        super(context, attrs);\r\n    }\r\n\r\n    public NoSeleccionableSpinner(Context context, AttributeSet attrs, int defStyle) {\r\n        super(context, attrs, defStyle);\r\n    }\r\n\r\n    @Override\r\n    public void setPressed(boolean pressed) {\r\n        \/\/ Make sure the parent is a View prior casting it to View\r\n        if (pressed &amp;&amp; getParent() instanceof View &amp;&amp; ((View) getParent()).isPressed()) {\r\n            return;\r\n        }\r\n        super.setPressed(pressed);\r\n    }\r\n}<\/pre>\n<p><strong>Clase VentasBaseAdapter:<\/strong><\/p>\n<pre class=\"lang:default decode:true \">import android.content.Context;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.ArrayAdapter;\r\nimport android.widget.BaseAdapter;\r\nimport android.widget.Button;\r\nimport android.widget.Spinner;\r\nimport android.widget.TextView;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\nimport com.profeluismitre.mitienda.R;\r\n\r\npublic class VentasBaseAdapter extends BaseAdapter {\r\n    Context contexto;\r\n    ArrayList&lt;Producto&gt; listaproducto;\r\n    LayoutInflater inflater;\r\n    accionBotonVentas listener;\r\n\r\n    public VentasBaseAdapter(Context contexto,  ArrayList&lt;Producto&gt; listaproducto, accionBotonVentas listener) {\r\n        this.contexto = contexto;\r\n        this.listaproducto = listaproducto;\r\n        this.listener=listener;\r\n    }\r\n\r\n    @Override\r\n    public int getCount() {\r\n        return listaproducto.size();\r\n    }\r\n\r\n    @Override\r\n    public Object getItem(int i) {\r\n        return listaproducto.get(i);\r\n    }\r\n\r\n    @Override\r\n    public long getItemId(int i) {\r\n        return i;\r\n    }\r\n\r\n    @Override\r\n    public View getView(int posicion, View convertView, ViewGroup parent) {\r\n\r\n        TextView codigo;\r\n        TextView descripcion;\r\n        TextView precio;\r\n        final Spinner spinner;\r\n        Button btnAgregar;\r\n\r\n        inflater = (LayoutInflater) contexto.getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r\n\r\n        View itemView = inflater.inflate(R.layout.elementos_ventas_lista, parent, false);\r\n        codigo = (TextView) itemView.findViewById(R.id.txtCodVent);\r\n        descripcion = (TextView) itemView.findViewById(R.id.txtDescVent);\r\n        precio = (TextView) itemView.findViewById(R.id.txtPrecVent);\r\n        spinner = (Spinner) itemView.findViewById(R.id.spinListVent);\r\n        btnAgregar=(Button)itemView.findViewById(R.id.btnAgregarVentas);\r\n        List&lt;String&gt; numeros = new ArrayList&lt;String&gt;();\r\n        final Producto prod=listaproducto.get(posicion);\r\n        for (int x = 1; x &lt;= prod.getCantidad(); x++) {\r\n            numeros.add(String.valueOf(x));\r\n        }\r\n\r\n        codigo.setText(\"Codigo: \"+prod.getCodigo());\r\n        descripcion.setText(prod.getDescripcion());\r\n        precio.setText(\"$ \" +prod.getPrecio());\r\n        spinner.setPrompt(\"Cantidad\");\r\n        spinner.setAdapter(new ArrayAdapter&lt;String&gt;(contexto, android.R.layout.simple_spinner_item, numeros));\r\n\r\n        btnAgregar.setTag(posicion);\r\n        btnAgregar.setOnClickListener(new View.OnClickListener() {\r\n            @Override\r\n            public void onClick(View view) {\r\n                int cantidad=spinner.getSelectedItemPosition()+1;\r\n                listener.calcularTotal(prod.getCodigo(),cantidad,\r\n                        Double.parseDouble(prod.getPrecio()));\r\n            }\r\n        });\r\n        return itemView;\r\n    }\r\n\r\n}<\/pre>\n<p>Nota: En los import de la clase deberas cambiar el nombre del paquete del Import com.profeluismitre.mitienda.R\u00a0 por el nombre del paquete de tu proyecto y lo terminas con la R mayuscula.<\/p>\n<p><strong>Clase Escaneo:<\/strong><\/p>\n<pre class=\"lang:default decode:true \">public class Escaneo {\r\n    public static boolean escaneo=false;\r\n    public static String codigo=\"\";\r\n    public static String usuario=\"\";\r\n    public static String tipousuario=\"\";\r\n}<\/pre>\n<p><strong>Clase (Interface) accionBotonVentas:<\/strong><\/p>\n<p>a diferencia de las demas clases al poner el nombre de la clase le cambiaremos a interface:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-328 aligncenter\" src=\"http:\/\/www.profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita24-300x242.png\" alt=\"\" width=\"300\" height=\"242\" srcset=\"https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita24-300x242.png 300w, https:\/\/profeluismitre.com.mx\/Ejemplos\/wp-content\/uploads\/2018\/04\/miTiendita24.png 547w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>y el c\u00f3digo quedar\u00eda de la siguiente manera:<\/p>\n<pre class=\"lang:default decode:true\">public interface accionBotonVentas {\r\n     void calcularTotal(String codigo,int cantidad, double precio);\r\n}<\/pre>\n<h3><span style=\"color: #ff0000;\">Paso 13.<\/span><\/h3>\n<p><span style=\"color: #000000;\">Ahora ya creamos las clases necesarios, entonces iniciamos con las acciones de los fragmentos empezando por el mas F\u00e1cil al Mas Dif\u00edcil:<\/span><\/p>\n<h3><strong>Fragmento Inventario<\/strong><\/h3>\n<pre class=\"lang:default decode:true\">import android.database.Cursor;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.os.Bundle;\r\nimport android.support.v4.app.Fragment;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.ListView;\r\nimport android.widget.Toast;\r\nimport librerias.ListaAdapter;\r\nimport librerias.MiBaseDatos;\r\nimport librerias.Producto;\r\n\r\n\r\npublic class InventarioFragment extends Fragment {\r\n    \/\/creamos los objetos necesarios\r\n    ListView lista;\r\n    ListaAdapter adaptador;\r\n    MiBaseDatos baseDatos;\r\n\r\n\r\n    @Override\r\n    public View onCreateView(LayoutInflater inflater, ViewGroup container,\r\n                             Bundle savedInstanceState) {\r\n        \/\/ Inflate the layout for this fragment\r\n        return inflater.inflate(R.layout.fragment_inventario, container, false);\r\n    }\r\n    \r\n    public void onStart(){\r\n        super.onStart();\r\n        \/\/inicializamos los objetos\r\n        lista=(ListView)getView().findViewById(R.id.listaInventario);\r\n        adaptador=new ListaAdapter(getContext());\r\n        \/\/mandamos buscar los porductos existentens en la base de datos\r\n        buscar();\r\n        \/\/una vez buscado insertamos en la lista\r\n        adaptador.notifyDataSetChanged();\r\n        lista.setAdapter(adaptador);\r\n    }\r\n    \/\/metodo que busca los productos en la base de datos\r\n    public void buscar(){\r\n        \/\/inicializamos la base de datos\r\n        baseDatos=new MiBaseDatos(getContext());\r\n        \/\/creamos un objeto para manipular la base de datos de modo lectura\r\n        SQLiteDatabase sqlite=baseDatos.getReadableDatabase();\r\n        \/\/creamos una arreglo con los nombres de las columnos que nos traeremos de la base de datos\r\n        String []columnas={\r\n                \"codigo\",\r\n                \"descripcion\",\r\n                \"precio\",\r\n                \"cantidad\"};\r\n        \/\/generamos la consulta con el metodo \r\n        \/\/sqlite.query(nombreBD,Columnas,null,null,null,null,null); todos los demas son null\r\n        \/\/ya que no haremos consulta espesifica..\r\n        Cursor cursor=sqlite.query(\"productos\",columnas,null,null,null,null,null);\r\n        \/\/limpiamos el adaptador antes de insertar para evitar duplicados..\r\n        adaptador.clear();\r\n        if(cursor.getCount()!=0){\r\n            while (cursor.moveToNext()){\r\n                adaptador.add(new Producto(\r\n                        cursor.getString(cursor.getColumnIndex(\"codigo\")),\r\n                        cursor.getString(cursor.getColumnIndex(\"descripcion\")),\r\n                        cursor.getString(cursor.getColumnIndex(\"precio\")),\r\n                        cursor.getInt(cursor.getColumnIndex(\"cantidad\"))));\r\n            }\r\n        }else{\r\n            Toast.makeText(getContext(), \"Base de Datos Vacia\", Toast.LENGTH_SHORT).show();\r\n        }\r\n        sqlite.close();\r\n    }\r\n}\r\n<\/pre>\n<h3>Fragmento Consultar:<\/h3>\n<pre class=\"lang:default decode:true\">import android.app.ProgressDialog;\r\nimport android.database.Cursor;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.os.AsyncTask;\r\nimport android.os.Bundle;\r\nimport android.support.v4.app.Fragment;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.Button;\r\nimport android.widget.EditText;\r\nimport android.widget.ListView;\r\nimport android.widget.Toast;\r\n\r\nimport librerias.ListaAdapter;\r\nimport librerias.MiBaseDatos;\r\nimport librerias.Producto;\r\n\r\npublic class ConsultarFragment extends Fragment implements View.OnClickListener {\r\n    \/\/ creamos los objetos necesarios\r\n    ListView lista;\r\n    Button btnBuscar;\r\n    EditText txtDescripcion;\r\n    ListaAdapter adaptador;\r\n    MiBaseDatos basedatos;\r\n\r\n    @Override\r\n    public View onCreateView(LayoutInflater inflater, ViewGroup container,\r\n                             Bundle savedInstanceState) {\r\n        \/\/ Inflate the layout for this fragment\r\n        return inflater.inflate(R.layout.fragment_consultar, container, false);\r\n    }\r\n\r\n    public void onStart(){\r\n        super.onStart();\r\n        \/\/inicializamos los objetos\r\n        lista=(ListView)getView().findViewById(R.id.listaConsultas);\r\n        btnBuscar=(Button)getView().findViewById(R.id.btnBusCons);\r\n        txtDescripcion=(EditText)getView().findViewById(R.id.txtDescConsultar);\r\n        adaptador=new ListaAdapter(getContext());\r\n        \/\/le agregamos accion al btnBuscar\r\n        btnBuscar.setOnClickListener(this);\r\n        adaptador.notifyDataSetChanged();\r\n        \/\/agregamos los elementos a la lista\r\n        lista.setAdapter(adaptador);\r\n    }\r\n\r\n    @Override\r\n    public void onClick(View view) {\r\n        \/\/cuando se oprima el boton buscar se ejecuta la tarea asincrona\r\n        if(view.getId()==R.id.btnBusCons){\r\n            new TareaAsincrona().execute();\r\n\r\n        }\r\n    }\r\n    \/\/el metodo buscar sera el encargado de buscar todos los productos que coincidan\r\n    public void buscar(String descripcion){\r\n        String descrip;\r\n        \/\/Se inicializa la clase.\r\n        basedatos = new MiBaseDatos(getContext());\r\n        \/\/Se establecen permisos de lectura\r\n        SQLiteDatabase sqlite = basedatos.getReadableDatabase();\r\n        \/\/Columnas que devolver\u00e1 la consulta.\r\n        String[] columnas = {\r\n                \"codigo\",\r\n                \"descripcion\",\r\n                \"precio\",\r\n                \"cantidad\" };\r\n        descrip=txtDescripcion.getText().toString();\r\n        \/\/Cl\u00e1usula WHERE para buscar por producto\r\n        String consulta = \"descripcion LIKE '\" + descrip  + \"%'\";\r\n        \/\/Orden de los resultados devueltos por Producto, de forma Descendente alfab\u00e9ticamente\r\n        String ordenSalida = \"codigo DESC\";\r\n\r\n        if(descrip.equals(\"\"))\r\n        {\r\n            Toast.makeText(getContext(), \"Debes Introducir una Descripci\u00f3n.\", Toast.LENGTH_LONG).show();\r\n        }else\r\n        {\r\n            \/\/Ejecuta la sentencia devolviendo los resultados de los par\u00e1metros pasados de tabla, columnas, producto y orden de los resultados.\r\n            Cursor cursor = sqlite.query(\"productos\", columnas, consulta,null , null, null, null);\r\n\r\n            if(cursor.getCount() != 0)\r\n            {\r\n                cursor.moveToFirst();\r\n                adaptador.add(new Producto(\r\n                        cursor.getString(cursor.getColumnIndex(\"codigo\")),\r\n                        cursor.getString(cursor.getColumnIndex(\"descripcion\")),\r\n                        cursor.getString(cursor.getColumnIndex(\"precio\")),\r\n                        cursor.getInt(cursor.getColumnIndex(\"cantidad\"))\r\n                ));\r\n                adaptador.notifyDataSetChanged();\r\n                lista.setAdapter(adaptador);\r\n\r\n            }\r\n            else\r\n            {\r\n                Toast.makeText(getContext(), \"No Existe ninguna Considencia \", Toast.LENGTH_LONG).show();\r\n            }\r\n\r\n        }\r\n        \/\/Se cierra la conexi\u00f3n abierta a la Base de Datos\r\n        sqlite.close();\r\n\r\n\r\n    }\r\n\r\n    \/\/ la tarea asincrona es la encargada de mostrar nuestra barra de progreso la cual\r\n    \/\/ se muestra por 2 segundos y posteriormente se muestra el resultado obtenido\r\n    private class TareaAsincrona extends AsyncTask&lt;Void, Void, String&gt; {\r\n        private ProgressDialog nDialog;\r\n        public TareaAsincrona() {\r\n            nDialog = new ProgressDialog(getActivity());\r\n        }\r\n\r\n        @Override\r\n        protected String doInBackground(Void... voids) {\r\n            try {\r\n                Thread.sleep(2000);\r\n            } catch (InterruptedException e) {\r\n                e.printStackTrace();\r\n            }\r\n            return null;\r\n        }\r\n\r\n        protected void onPreExecute() {\r\n            nDialog.show();\r\n            nDialog.setContentView(R.layout.dialogo_buscar);\r\n        }\r\n\r\n        protected void onPostExecute(String result) {\r\n            super.onPostExecute(result);\r\n            if (nDialog.isShowing()) {\r\n                nDialog.dismiss();\r\n                buscar(txtDescripcion.getText().toString());\r\n            }\r\n        }\r\n\r\n    }\r\n}<\/pre>\n<h3>Fragmento Registrar:<\/h3>\n<p>Primeramente para poder hacer funcionar el lector de c\u00f3digo de barras agregaremos los siguientes m\u00e9todos dentro de la clase PrincipalActivity.java:<\/p>\n<pre class=\"lang:default decode:true\">@Override\r\n    public void onActivityResult(int requestCode, int resultCode, Intent intent) {\r\n        \/\/ retrieve scan result\r\n        IntentResult scanningResult = IntentIntegrator.parseActivityResult(\r\n                requestCode, resultCode, intent);\r\n        if (scanningResult != null) {\r\n            \/\/ we have a result\r\n            String scanContent = scanningResult.getContents();\r\n            Escaneo.codigo=scanContent;\r\n            Escaneo.escaneo=true;\r\n\r\n        } else {\r\n            Toast.makeText(getApplicationContext(),\r\n                    \"No scan data received!\", Toast.LENGTH_SHORT).show();\r\n        }\r\n    }<\/pre>\n<pre class=\"lang:default decode:true\"> public void cerrarSesion(){\r\n        baseDatos=new MiBaseDatos(getApplicationContext());\r\n        SQLiteDatabase sqlite=baseDatos.getWritableDatabase();\r\n        sqlite.delete(\"usuarioActivo\",\"usuario LIKE '\"+ Escaneo.usuario+\"'\",null);\r\n        sqlite.close();\r\n        Intent miIntento=new Intent(getApplicationContext(),LoginActivity.class);\r\n        startActivity(miIntento);\r\n    }<\/pre>\n<p>y remplazaremos el m\u00e9todo <strong>onBackPressed<\/strong> por lo siguiente:<\/p>\n<pre class=\"lang:default decode:true \">public void onBackPressed(){\r\n        \/\/super.onBackPressed();\r\n\r\n        AlertDialog.Builder dialogo=\r\n                new AlertDialog.Builder(PrincipalActivity.this );\r\n        dialogo.setTitle(\"Salir de la Aplicaci\u00f3n\");\r\n        dialogo.setMessage(\"\u00bfDeseas Salir de la Aplicaci\u00f3n o Cerrar Sesi\u00f3n?\");\r\n        dialogo.setCancelable(false);\r\n        dialogo.setPositiveButton(\"Salir App\", new DialogInterface.OnClickListener() {\r\n            @Override\r\n            public void onClick(DialogInterface dialog, int which) {\r\n                finish();\r\n            }\r\n        });\r\n        dialogo.setNegativeButton(\"Cerrar Sesion\", new DialogInterface.OnClickListener() {\r\n            @Override\r\n            public void onClick(DialogInterface dialog, int which) {\r\n                cerrarSesion();\r\n                finish();\r\n            }\r\n        });\r\n        AlertDialog dialogos=dialogo.create();\r\n       dialogos.show();\r\n    }<\/pre>\n<p>una vez agregado lo anterior nuestro fragmento quedar\u00eda de la manera siguiente:<\/p>\n<pre class=\"lang:default decode:true\">import android.app.ProgressDialog;\r\nimport android.content.ContentValues;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.os.AsyncTask;\r\nimport android.os.Bundle;\r\nimport android.support.v4.app.Fragment;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.Button;\r\nimport android.widget.EditText;\r\nimport android.widget.Toast;\r\n\r\nimport librerias.Escaneo;\r\nimport librerias.IntentIntegrator;\r\nimport librerias.MiBaseDatos;\r\nimport librerias.Producto;\r\n\r\n\r\npublic class RegistrarFragment extends Fragment implements View.OnClickListener {\r\n    \/\/creamos los objetos necesarios para el fragmento\r\n    Button btnScaner, btnGrabar, btnCancelar;\r\n    EditText txtCodigo;\r\n    EditText txtDescripcion;\r\n    EditText txtPrecio;\r\n    EditText txtCantidad;\r\n    MiBaseDatos baseDatos;\r\n\r\n    @Override\r\n    public View onCreateView(LayoutInflater inflater, ViewGroup container,\r\n                             Bundle savedInstanceState) {\r\n        \/\/ Inflate the layout for this fragment\r\n        return inflater.inflate(R.layout.fragment_registrar, container, false);\r\n    }\r\n    public void onStart(){\r\n        super.onStart();\r\n        \/\/inicializamos los objetos\r\n        btnScaner=(Button) getView().findViewById(R.id.btnScannerRegistro);\r\n        btnGrabar=(Button) getView().findViewById(R.id.btnGrabarRegistro);\r\n        btnCancelar=(Button) getView().findViewById(R.id.btnCancelarRegistro);\r\n        txtCodigo=(EditText)getView().findViewById(R.id.txtCodigoRegistro);\r\n        txtDescripcion=(EditText)getView().findViewById(R.id.txtDescRegistro);\r\n        txtPrecio=(EditText)getView().findViewById(R.id.txtPrecioRegistro);\r\n        txtCantidad=(EditText)getView().findViewById(R.id.txtCantidadRegistro);\r\n        \r\n        \/\/le asignamos los escuchadores a los botones\r\n        btnScaner.setOnClickListener(this);\r\n        btnGrabar.setOnClickListener(this);\r\n\r\n    }\r\n\r\n    \/**\r\n     * este metodo es el encargado de almacenar los datos del formulario\r\n     * en la base de datos\r\n     *\/\r\n    public void grabar(){\r\n        \/\/inicializamos el objeto\r\n        baseDatos=new MiBaseDatos(getContext());\r\n        \/\/creamos el manipulador en forma escritura\r\n        SQLiteDatabase sqlDataBase=baseDatos.getWritableDatabase();\r\n        \/\/leemos las cajas de texto y metemos la informacion en variables\r\n        String codigo=txtCodigo.getText().toString();\r\n        String descripcion=txtDescripcion.getText().toString();\r\n        String precio=txtPrecio.getText().toString();\r\n        String cantidad=txtCantidad.getText().toString();\r\n        \/\/creamos un objeto donde empaquetaremos los valores\r\n        ContentValues contenido=new ContentValues();\r\n        \/\/verificamos que no se encuentre ningun dato vacio\r\n        if(codigo.equals(\"\")||descripcion.equals(\"\")||precio.equals(\"\")||cantidad.equals(\"\")){\r\n            Toast.makeText(getContext(), \"Favor de LLenar todos los Datos\", Toast.LENGTH_SHORT).show();\r\n        }else{\r\n            \/\/si ninguno esta vacio los empaquetamos\r\n            contenido.put(\"codigo\",codigo);\r\n            contenido.put(\"descripcion\",descripcion);\r\n            contenido.put(\"precio\",precio);\r\n            contenido.put(\"cantidad\",cantidad);\r\n            \/\/una ves empaquetado lo mandamos a la base de datos\r\n            \/\/El nombre \"productos\" es el nombre de la tabla de la base de datos\r\n            sqlDataBase.insertWithOnConflict(\"productos\",null,contenido,SQLiteDatabase.CONFLICT_IGNORE);\r\n            cancelar();\r\n        }\r\n        \/\/cerramos la conexion a la base de datos\r\n        sqlDataBase.close();\r\n    }\r\n    \/\/metodo que limpia todos los campos\r\n    public void cancelar(){\r\n        txtCodigo.setText(\"\");\r\n        txtCantidad.setText(\"\");\r\n        txtPrecio.setText(\"\");\r\n        txtDescripcion.setText(\"\");\r\n        txtCodigo.requestFocus();\r\n        Escaneo.escaneo=false;\r\n    }\r\n\/\/implementacion de las acciones de los botoes\r\n    @Override\r\n    public void onClick(View view) {\r\n        \/\/Se responde al evento click y si el boton oprimido es Scanner\r\n        if(view.getId()==R.id.btnScannerRegistro){\r\n            Escaneo.escaneo=true;\r\n            \/\/Se instancia un objeto de la clase IntentIntegrator\r\n            IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());\r\n            \/\/Se procede con el proceso de scaneo\r\n            scanIntegrator.initiateScan();\r\n\r\n        }\/\/de lo contrario si el boton es el grabar\r\n        else if(view.getId()==R.id.btnGrabarRegistro){\r\n            new TareaAsincrona().execute();\r\n            \r\n        }\/\/ o si el boton oprimido es el cancelar\r\n        else if(view.getId()==R.id.btnCancelarRegistro){\r\n            cancelar();\r\n        }\r\n    }\r\n    \/\/metodo que permite verificar si se escaneo un producto al regresear en si la aplicacion\r\n    public void onResume(){\r\n        super.onResume();\r\n        if(Escaneo.escaneo) {\r\n            txtCodigo.setText(Escaneo.codigo);\r\n            Escaneo.escaneo=false;\r\n        }\r\n    }\r\n\/\/tarea asincrona que realiza la accion de mostrar la barra de progreso y mandar llamar grabar..\r\n    private class TareaAsincrona extends AsyncTask&lt;Void, Void, String&gt; {\r\n        private ProgressDialog nDialog;\r\n        String boton;\r\n        public TareaAsincrona(){\r\n            nDialog = new ProgressDialog(getActivity()); \/\/Here I get an error: The constructor ProgressDialog(PFragment) is undefined\r\n           \r\n        }\r\n        @Override\r\n        protected String doInBackground(Void... voids) {\r\n            try {\r\n                Thread.sleep(3000);\r\n            } catch (InterruptedException e) {\r\n                e.printStackTrace();\r\n            }\r\n            return null;\r\n        }\r\n\r\n        protected void onPreExecute() {\r\n            nDialog.show();\r\n            nDialog.setContentView(R.layout.dialogo_grabando);\r\n\r\n\r\n        }\r\n\r\n        protected void onPostExecute(String result) {\r\n            super.onPostExecute(result);\r\n\r\n            if (nDialog.isShowing()) {\r\n                nDialog.dismiss();\r\n                grabar();\r\n                cancelar();\r\n            }\r\n        }\r\n    }\r\n}<\/pre>\n<h3>Fragmento Ventas:<\/h3>\n<p>el Fragmento quedaria de la siguiente manera:<\/p>\n<pre class=\"lang:default decode:true\">import android.app.ProgressDialog;\r\nimport android.content.ContentValues;\r\nimport android.content.DialogInterface;\r\nimport android.database.Cursor;\r\nimport android.database.sqlite.SQLiteDatabase;\r\nimport android.os.AsyncTask;\r\nimport android.os.Bundle;\r\nimport android.support.v4.app.Fragment;\r\nimport android.support.v7.app.AlertDialog;\r\nimport android.view.KeyEvent;\r\nimport android.view.LayoutInflater;\r\nimport android.view.View;\r\nimport android.view.ViewGroup;\r\nimport android.widget.Button;\r\nimport android.widget.EditText;\r\nimport android.widget.ListView;\r\nimport android.widget.Toast;\r\nimport java.util.ArrayList;\r\n\r\nimport librerias.Escaneo;\r\nimport librerias.IntentIntegrator;\r\nimport librerias.MiBaseDatos;\r\nimport librerias.Producto;\r\nimport librerias.VentasBaseAdapter;\r\nimport librerias.accionBotonVentas;\r\n\r\n\r\npublic class VentasFragment extends Fragment implements accionBotonVentas,\r\n        View.OnClickListener { ListView lista;\r\n    \/\/Objetos necesarios \r\n    VentasBaseAdapter adaptador;\r\n    Button btnScaner, btnCobrar;\r\n    EditText txtCodigo;\r\n    double total=0;\r\n    MiBaseDatos basedatos;\r\n    \/\/arreglos que almacenaran los productos vendidos\r\n    ArrayList&lt;String&gt; codigosVendidos=new ArrayList();\r\n    ArrayList&lt;String&gt; cantidadProductos=new ArrayList();\r\n\r\n    public View onCreateView(LayoutInflater inflater, ViewGroup container,\r\n                             Bundle savedInstanceState) {\r\n        \/\/ Inflate the layout for this fragment\r\n        return inflater.inflate(R.layout.fragment_ventas, container, false);\r\n    }\r\n    public void onStart() {\r\n        super.onStart();\r\n        \/\/inicializamos los objetos\r\n        lista=(ListView)getView().findViewById(R.id.listaVentas);\r\n        btnScaner=(Button)getView().findViewById(R.id.btnScanerVentas);\r\n        btnCobrar=(Button)getView().findViewById(R.id.btnCobrarVentas);\r\n        txtCodigo=(EditText)getView().findViewById(R.id.txtCodigoVentas);\r\n        \/\/agregamos los escuchadores a los botones\r\n        btnScaner.setOnClickListener(this);\r\n        btnCobrar.setOnClickListener(this);\r\n        \/\/agregamos una escuchador de teclado en caso que no se use el escaner\r\n        txtCodigo.setOnKeyListener(new View.OnKeyListener() {\r\n            @Override\r\n            public boolean onKey(View view, int i, KeyEvent keyEvent) {\r\n                \/\/se verifica la tecla 66 que es Aceptar en el teclado numerico\r\n                if(keyEvent.getKeyCode()==66){\r\n                    new TareaAsincrona().execute();\r\n                }\r\n                return false;\r\n            }\r\n        });\r\n\r\n    }\r\n\r\n    \/**\r\n     * Implementamos la acciones de los botones\r\n     * \r\n     *\/\r\n    @Override\r\n    public void onClick(View view) {\r\n        \/\/si el boton oprimido es Scanner\r\n        if(view.getId()==R.id.btnScanerVentas){\r\n            Escaneo.escaneo=true;\r\n            \/\/Se instancia un objeto de la clase IntentIntegrator\r\n            IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());\r\n            \/\/Se procede con el proceso de scaneo\r\n            scanIntegrator.initiateScan();\r\n\r\n        }\/\/si el botone oprimido es el cobrar\r\n        else if(view.getId()==R.id.btnCobrarVentas){\r\n            AlertDialog.Builder dialogo=\r\n                    new AlertDialog.Builder(getContext());\r\n            dialogo.setTitle(\"TOTAL A PAGAR\");\r\n            dialogo.setMessage(\"EL Total de la Cuenta es: $\"+String.valueOf(total));\r\n            dialogo.setCancelable(false);\r\n            dialogo.setPositiveButton(\"Cobrar\", new DialogInterface.OnClickListener() {\r\n                @Override\r\n                public void onClick(DialogInterface dialog, int which) {\r\n                    cobrar();\r\n                }\r\n            });\r\n            dialogo.setNegativeButton(\"Cancelar\", new DialogInterface.OnClickListener() {\r\n                @Override\r\n                public void onClick(DialogInterface dialog, int which) {\r\n                    cancelar();\r\n                }\r\n            });\r\n            AlertDialog dialogos=dialogo.create();\r\n            dialogos.show();\r\n        }\r\n    }\r\n    \/\/metodo para verificar si se escaneo cuando se presenta nuevamente el fragmento\r\n    public void onResume(){\r\n        super.onResume();\r\n        if(Escaneo.escaneo){\r\n            txtCodigo.setText(Escaneo.codigo);\r\n            Escaneo.escaneo=false;\r\n            new TareaAsincrona().execute();\r\n        }\r\n\r\n    }\r\n\r\n    \/**\r\n     * En este metodo hacemos la busqueda del codigo para mostrarlo en la lista de ventas\r\n     *\/\r\n    public void buscar(){\r\n        \/\/array para ir almacenando los productos\r\n        ArrayList&lt;Producto&gt; productos=new ArrayList();\r\n        String codigo;\r\n        \/\/Se inicializa la clase.\r\n        basedatos = new MiBaseDatos(getContext());\r\n        \/\/Se establecen permisos de lectura\r\n        SQLiteDatabase sqlite = basedatos.getReadableDatabase();\r\n        \/\/Columnas que devolver\u00e1 la consulta.\r\n        String[] columnas = {\r\n                \"codigo\",\r\n                \"descripcion\",\r\n                \"precio\",\r\n                \"cantidad\" };\r\n        codigo=txtCodigo.getText().toString();\r\n        \/\/Cl\u00e1usula WHERE para buscar por producto\r\n        String consulta = \"codigo LIKE '\" + codigo  + \"%'\";\r\n        \/\/Orden de los resultados devueltos por Producto, de forma Descendente alfab\u00e9ticamente\r\n        String ordenSalida = \"codigo DESC\";\r\n\r\n        if(codigo.equals(\"\"))\r\n        {\r\n            Toast.makeText(getContext(), \"Debes Introducir o Escanear un Codigo.\", Toast.LENGTH_LONG).show();\r\n        }else\r\n        {\r\n            \/\/Ejecuta la sentencia devolviendo los resultados de los par\u00e1metros pasados de tabla, columnas, producto y orden de los resultados.\r\n            Cursor cursor = sqlite.query(\"productos\", columnas, consulta,null , null, null, null);\r\n\r\n            if(cursor.getCount() != 0)\r\n            {\/\/nos ponemos en el primer registro\r\n                cursor.moveToFirst();\r\n                \/\/creamos un Producto con los valores de la base de datos\r\n                productos.add(new Producto(\r\n                        cursor.getString(cursor.getColumnIndex(\"codigo\")),\r\n                        cursor.getString(cursor.getColumnIndex(\"descripcion\")),\r\n                        cursor.getString(cursor.getColumnIndex(\"precio\")),\r\n                        cursor.getInt(cursor.getColumnIndex(\"cantidad\"))\r\n                ));\r\n                \/\/agregamos el producto a la lista\r\n                adaptador= new VentasBaseAdapter(getContext(),productos,this);\r\n                adaptador.notifyDataSetChanged();\r\n                lista.setAdapter(adaptador);\r\n\r\n            }\r\n            else\r\n            {\r\n                Toast.makeText(getContext(), \"No Existe ninguna Considencia \", Toast.LENGTH_LONG).show();\r\n            }\r\n\r\n        }\r\n        \/\/Se cierra la conexi\u00f3n abierta a la Base de Datos\r\n        sqlite.close();\r\n    }\r\n\r\n    \/**\r\n     * Metodo que permitira mostrar el total de los productos y asu vez restara las cantidades vendidas\r\n     *\/\r\n    public void cobrar(){\r\n        \/\/se inicializa la base de datos\r\n        basedatos=new MiBaseDatos(getContext());\r\n        SQLiteDatabase sqlite=basedatos.getWritableDatabase();\r\n       \/\/se buscan los objetos dentro del arreglo de los productos agregados\r\n        for(int x=0;x&lt;codigosVendidos.size();x++){\r\n            String []columnas={\"codigo\",\"cantidad\"};\r\n            \/\/se busca el codigo del producto\r\n            String consulta=\"codigo LIKE '\" +codigosVendidos.get(x)+ \"'\";\r\n            Cursor cursor=sqlite.query(\"productos\",columnas,consulta,null,null,null,null);\r\n            if(cursor.getCount()!=0) {\r\n                if(cursor.moveToNext()){\r\n                    \/\/se restan las cantidades de producto y se modifica la cantidad en la BD\r\n                    int cantidadActual = cursor.getInt(cursor.getColumnIndex(\"cantidad\"));\r\n                    int cantidadTotal = cantidadActual - Integer.parseInt(cantidadProductos.get(x));\r\n                    ContentValues contenido = new ContentValues();\r\n                    contenido.put(\"cantidad\", String.valueOf(cantidadTotal));\r\n                    sqlite.update(\"productos\", contenido, \"codigo LIKE '\" + codigosVendidos.get(x) + \"'\", null);\r\n                }\r\n\r\n            }\r\n        }\r\n        \/\/cerramos conexion\r\n        sqlite.close();\r\n        cancelar();\r\n    }\r\n\r\n    \/**\r\n     * metodo que permite limpiar\r\n     *\/\r\n    public void cancelar(){\r\n        cantidadProductos.removeAll(cantidadProductos);\r\n        codigosVendidos.removeAll(codigosVendidos);\r\n        ArrayList&lt;Producto&gt; productos=new ArrayList();\r\n        adaptador= new VentasBaseAdapter(getContext(),productos,this);\r\n        adaptador.notifyDataSetChanged();\r\n        lista.setAdapter(adaptador);\r\n        Escaneo.escaneo=false;\r\n    }\r\n    \/\/metodo que implementa el boton agregar que acumula las ventas\r\n    public void calcularTotal(String codigo, int cantidad, double precio) {\r\n        double total=cantidad*precio;\r\n        codigosVendidos.add(codigo);\r\n        cantidadProductos.add(String.valueOf(cantidad));\r\n        Toast.makeText(getContext(), \"Agregando a Total:\"+String.valueOf(total), Toast.LENGTH_SHORT).show();\r\n        this.total=this.total+total;\r\n    }\r\n\r\n    \/**\r\n     * Tarea que ejecuta el progress al buscar el producto\r\n     *\/\r\n    private class TareaAsincrona extends AsyncTask&lt;Void, Void, String&gt; {\r\n        private ProgressDialog nDialog;\r\n\r\n        public TareaAsincrona(){\r\n            nDialog = new ProgressDialog(getActivity()); \r\n        }\r\n        @Override\r\n        protected String doInBackground(Void... voids) {\r\n            try {\r\n                Thread.sleep(2000);\r\n            } catch (InterruptedException e) {\r\n                e.printStackTrace();\r\n            }\r\n            return null;\r\n        }\r\n        protected void onPreExecute() {\r\n            nDialog.show();\r\n            nDialog.setContentView(R.layout.dialogo_buscar);\r\n\r\n        }\r\n        protected void onPostExecute(String result) {\r\n            super.onPostExecute(result);\r\n\r\n            if (nDialog.isShowing()) {\r\n                nDialog.dismiss();\r\n                buscar();\r\n            }\r\n        }\r\n    }\r\n}<\/pre>\n<h3>Fin.. con esto quedar\u00eda nuestra aplicaci\u00f3n terminada..<\/h3>\n","protected":false},"excerpt":{"rendered":"<p>Ejemplo Tiendita Con Base de Datos y mas Este ejemplo es la continuaci\u00f3n del ejemplo anterior en el cual le agregamos almacenamiento con base de datos mas otras acciones con ella, puedes utilizar la aplicaci\u00f3n de Tiendita sin Base de datos y agregar lo nuevo pero te recomiendo que empieces desde cero.. @Autor: Prof. Luis [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-337","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/profeluismitre.com.mx\/Ejemplos\/index.php?rest_route=\/wp\/v2\/pages\/337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/profeluismitre.com.mx\/Ejemplos\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/profeluismitre.com.mx\/Ejemplos\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/profeluismitre.com.mx\/Ejemplos\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/profeluismitre.com.mx\/Ejemplos\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=337"}],"version-history":[{"count":9,"href":"https:\/\/profeluismitre.com.mx\/Ejemplos\/index.php?rest_route=\/wp\/v2\/pages\/337\/revisions"}],"predecessor-version":[{"id":351,"href":"https:\/\/profeluismitre.com.mx\/Ejemplos\/index.php?rest_route=\/wp\/v2\/pages\/337\/revisions\/351"}],"wp:attachment":[{"href":"https:\/\/profeluismitre.com.mx\/Ejemplos\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}