Ejemplo Tiendita sin Base de Datos
este ejemplo implementa el uso de la Llamada ventana Splash, lector de código de barras y de almacenamiento en arreglos.
@Autor: Prof. Luis Mitre
Paso 1.
Iniciamos creando un nuevo proyecto en android Studio el cual llamare MiTiendita:
Al crear un nuevo proyecto aparecerá la imagen anterior.
- nombre de la Aplicación
- Paquete de instalación de la aplicación en Android, dejar por default el que pone android
- Ubicación del proyecto en la computadora preferentemente poner una ubicación fácil de localizar ya que necesitaremos acceder a ella.
Una vez llenado los datos oprimimos Next y aparacera la ventana siguente:

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

en la ventana ponemos el nombre que recibirá nuestra actividad la cual Llamare VentanaFlashActivity, la cual sera la portada de inicio de nuestra aplicación.
Paso 2.
Nos ubicaremos con el navegador de Windows en la ubicación de nuestro proyecto en el cual entraremos a la siguiente ruta: C:\UbicacionDelProyecto\MiTienda\app\src\main\res en el cual encontraras las siguientes carpetas:

ahora procederemos a crear 5 carpetas con los nombres siguientes:
- drawable-mdpi
- drawable-hdpi
- drawable-xhdpi
- drawable-xxhdpi
- drawable-xxxhdpi
las cuales son donde almacenáramos las imágenes que utilizaremos en nuestra aplicación, quedando de la siguiente manera:

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

una vez puesto las imágenes a utilizar para nuestra ventanaSplash procederemos a los siguiente.
Paso 3.
Procedemos a poner una imagen en la ventana visual de nuestra actividad que en mi caso se llama: activity_ventana_flash.xml, quedando el código de la siguiente manera:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context="com.profeluismitre.mitienda.VentanaFlashActivity">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/fondo"/>
</LinearLayout>
la cual se observaría de la siguiente manera:

Procederemos a asignarle código a la parte Java de esta actividad, el cual quedaría de la siguiente manera:
public class VentanaFlashActivity extends AppCompatActivity {
//tiempo que durara la ventana observandoce
private static final long TIEMPO_ESPERA = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//establecemos la orientacion de la pantalla en vertical
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//le ordenamos a la actividad que nos desaparesca el titulo para solo observar la imagen
requestWindowFeature(Window.FEATURE_NO_TITLE);
//montamos la parte visual de la actividad
setContentView(R.layout.activity_ventana_flash);
//creamos una tarea programada que es la que nos mandara la siguiente actividad
//recordonado que marcara error en LoginActivity si aun no la hemos creado
TimerTask task = new TimerTask() {
@Override
public void run() {
// Inciando la siguiente actividad
Intent mainIntent = new Intent().setClass(
VentanaFlashActivity.this, LoginActivity.class);
startActivity(mainIntent);
// cerramos la actividad para que el usuario no puede volver a esta
// si se oprime el boton de regresar del dispositivo
finish();
}
};
// establecemos un cronometro con el tiempo que decidimos para lanzar la actividad
Timer timer = new Timer();
timer.schedule(task, TIEMPO_ESPERA);
}
}
Nota: en caso de que no se quite el titulo de la actividad al ejecutar la aplicación tendremos que cambiar la herencia de la actividad VentanaSplashActivity que en mi caso es: AppCompatActivity por Activity esto es solo si no se quita el titulo
Paso 4.
Creamos una nueva actividad pero ahora del tipo LoginActivity la cual la llamaremos Así, dando click derecho sobre la Carpeta APP:


Una vez creada la activity, como es una actividad pre diseñada por android Studio le aremos algunos cambios y borraremos código que para nuestro ejemplo no necesitaremos.
Empezaremos con la ventana Visual, ingresamos al archivo creado xml llamado activity_login.xml
Primero modificamos la caja de texto de usuario:
Código original:
<AutoCompleteTextView
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_email"
android:inputType="textEmailAddress"
android:maxLines="1"
android:singleLine="true" />
Código Modificado:
<AutoCompleteTextView
android:id="@+id/txtUsuario"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Usuario"
android:inputType="text"
android:maxLines="1"
android:singleLine="true" />
Segundo modificamos la caja de texto de Contraseña:
Código Original:
<EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/prompt_password" android:imeActionId="@+id/login" android:imeActionLabel="@string/action_sign_in_short" android:imeOptions="actionUnspecified" android:inputType="textPassword" android:maxLines="1" android:singleLine="true" />
Código modificado:
<EditText android:id="@+id/txtContrasena" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Contraseña" android:imeActionId="@+id/login" android:imeActionLabel="@string/action_sign_in_short" android:imeOptions="actionUnspecified" android:inputType="textPassword" android:maxLines="1" android:singleLine="true" />
Por ultimo modificamos el Botón:
Código original:
<Button android:id="@+id/email_sign_in_button" style="?android:textAppearanceSmall" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="@string/action_sign_in" android:textStyle="bold" />
Código modificado:
<Button android:id="@+id/btnAcceso" style="?android:textAppearanceSmall" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="Ingresar" android:textStyle="bold" />
Paso 5.
Ahora en la clase java de esta actividad llamada LoginActivity.java borraremos prácticamente todo el código que se encuentra en ella quedando de la siguiente manera:
public class LoginActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
}
Ahora procedemos a darle acciones al botón para validar el usuario, el usuario y contraseña estarán en una variable, el código quedara de la siguiente manera:
public class LoginActivity extends AppCompatActivity{
//creamos las variables con las que compararemos el acceso
String usuario="admon";
String pass="123";
//cremamos los objetos para manipular la aplicacion
EditText txtUsuario, txtPassword;
Button btnAcceso;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//inicializamos los objetos java con los objetos xml
txtUsuario=(EditText)findViewById(R.id.txtUsuario);
txtPassword=(EditText)findViewById(R.id.txtContrasena);
btnAcceso=(Button) findViewById(R.id.btnAcceso);
//damos accion al boton para validar
btnAcceso.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(txtUsuario.getText().toString().equals(usuario) &&
txtPassword.getText().toString().equals(pass)){
Intent intento = new Intent(getApplicationContext(), PrincipalActivity.class);
startActivity(intento);
finish();
}else{
Snackbar.make(view, "Usuario y/o Password incorrecto", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
}
});
}
}
Nota: marcara error en PrincipalActivity.class, este se quitara en el paso siguiente.
Paso 6.
Crearemos la Actividad Principal la cual sera del tipo NavigationDrawerActivity la cual llamaremos PrincipalActivity:

Ahora procederemos a modificar la actividad para que quede a nuestro gusto empezaremos con modificar la barra lateral de navegacion de esta Actividad:
Paso a: cambiaremos la imagen y titulo de la barra de navegacion en el archivo llamado nav_header_principal.xml ubicado en la carpeta Layaout:

las flechas rojas indican la ubicación del archivo y las propiedades que cambiaremos quedando el código ya modificado de la siguiente manera:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="@dimen/nav_header_height"
android:background="@drawable/side_nav_bar"
android:gravity="bottom"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<ImageView
android:id="@+id/imageView"
android:layout_width="80dp"
android:layout_height="80dp"
android:paddingTop="@dimen/nav_header_vertical_spacing"
app:srcCompat="@drawable/barcode" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/nav_header_vertical_spacing"
android:text="MiTiendita"
android:textAppearance="@style/TextAppearance.AppCompat.Body1" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Profeluismitre.com/Ejemplos" />
</LinearLayout>
Paso b: ahora cambiaremos las opciones que aparecerán en el menú deslizable, este archivo se encuentra en la carpeta menu y este se llama activity_principal_drawer.xml.

dentro de este estan los menus u opciones las cuales las modificaremos quedando de la siguiente manera:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_principal"
android:icon="@drawable/ic_menu_camera"
android:title="Principal" />
<item
android:id="@+id/nav_registrar"
android:icon="@drawable/ic_menu_gallery"
android:title="Registrar" />
<item
android:id="@+id/nav_consultar"
android:icon="@drawable/ic_menu_slideshow"
android:title="Consultar" />
<item
android:id="@+id/nav_ventas"
android:icon="@drawable/ic_menu_manage"
android:title="Ventas" />
<item
android:id="@+id/nav_inventario"
android:icon="@drawable/ic_menu_share"
android:title="Inventario" />
</group>
</menu>
Paso c: para evitar que nos marque error nuestra actividad Principal por haber modificado los menus iremos al Archivo PrincipalActivity.java en el cual ubicaremos un metodo llamado: onNavigationItemSelected(MenuItem item) el cual modificaremos quedando de la siguiente manera:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_principal) {
// Handle the camera action
} else if (id == R.id.nav_registrar) {
} else if (id == R.id.nav_consultar) {
} else if (id == R.id.nav_ventas) {
} else if (id == R.id.nav_inventario) {
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
este método es el que nos ayudara a movernos entre ventanas.
Hasta este momento nuestra aplicación ya funciona podemos ejecutarla y ver su comportamiento.
Paso 7.
Ahora crearemos los fragmentos que serán las subVentanas que pondremos en nuestra actividad principal que son las que harán las funciones de nuestra aplicación.
Creamos el primer fragmento el cual se llamara PortadaFragment dando click derecho sobre APP y luego en fragment y posteriormente en Fragment(Blank):


una vez creado el fragmenta al igual que las activities se generan 2 archivos un XML y otro JAVA por el momento modificaremos el archivo JAVA borrando la mayor parte del código solo quedara lo siguiente:
public class PortadaFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_portada, container, false);
}
}
lo mismo haremos con los fragmentos restantes llamados:
- RegistrarFragment
- ConsultarFragment
- VentasFragment
- InventarioFragment
aplicando el mismo procedimiento que el anterior.
Paso 8.
una vez creado todos los fragmentos procederemos a poner los componente visuales en cada fragmento para visualizar en cada ventana:
Fragmento Portada:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center|top">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mi Tiendita"
android:gravity="center"
android:textSize="25dp"
android:layout_marginTop="20dp"
/>
<ImageView
android:layout_width="200dp"
android:layout_height="300dp"
android:src="@drawable/barcode"
android:layout_marginTop="25dp"/>
<TextView
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hecho por Luis Mitre"/>
</LinearLayout>
Nota: el codigo tendras que copiarlo entre las etiquetas de <FrameLayout> y </FrameLayout> ya que son las que marcan el inicio y el fin del fragmento
Fragmento Registrar:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center|top">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Registro de productos"
android:textSize="30dp"
android:paddingTop="25dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:layout_weight="1"
android:paddingTop="30dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Codigo:"
android:textSize="25dp"/>
<EditText
android:id="@+id/txtCodigoRegistro"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:inputType="number" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Scaner"
android:textSize="25dp"
android:id="@+id/btnScanerRegistro"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="30dp"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Descripcion"
android:gravity="center"
android:textSize="25dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp"
android:inputType="text"
android:id="@+id/txtDesRegistro"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="30dp"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Cantidad"
android:gravity="center"
android:textSize="25dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp"
android:inputType="text"
android:id="@+id/txtCantRegistro"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="30dp"
android:gravity="center"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Precio Venta"
android:gravity="center"
android:textSize="25dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp"
android:inputType="text"
android:id="@+id/txtPresRegistro"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="30dp"
android:gravity="center"
android:layout_weight="1"
android:orientation="horizontal">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancelar"
android:textSize="30dp"
android:id="@+id/btnCancelarReg"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Grabar"
android:textSize="30dp"
android:id="@+id/btnGrabarReg"/>
</LinearLayout>
</LinearLayout>
Fragmento Consultar:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/txtDescConsultar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="Descripcion"
android:textSize="30dp"
android:inputType="text" />
<Button
android:id="@+id/btnBusCons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Buscar"
android:textSize="20dp"/>
<ListView
android:id="@+id/listaConsultas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#FFCC00"
android:dividerHeight="4px"
android:paddingTop="30dp">
</ListView>
</LinearLayout>
Fragmento Ventas:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center|top"
android:layout_marginTop="15dp">
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<AutoCompleteTextView
android:id="@+id/txtCodigoVentas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="30dp"
android:hint="Codigo"
android:inputType="number"
android:maxLines="1"
android:singleLine="true" />
</android.support.design.widget.TextInputLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableRight="@drawable/iconoqr"
android:drawablePadding="8dp"
android:textColor="@android:color/black"
android:backgroundTint="#BBF4FA"
android:text="Escanear"
android:textSize="20dp"
android:layout_marginTop="10dp"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:id="@+id/btnScanerVentas"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center|top"
android:layout_marginTop="15dp">
<ListView
android:id="@+id/listaVentas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="20dp"
android:divider="#E4E5E4"
android:layout_weight="10"
android:dividerHeight="4px">
</ListView>
<Button
android:id="@+id/btnCobrarVentas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableRight="@drawable/iconocaja"
android:drawablePadding="8dp"
android:textColor="@android:color/black"
android:backgroundTint="#BBF4FA"
android:text="Cobrar"
android:textSize="20dp"
android:layout_marginTop="10dp"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"/>
</LinearLayout>
</LinearLayout>
Fragmento Inventario:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center|top">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="30dp"
android:divider="#FFCC00"
android:dividerHeight="4px"
android:id="@+id/listaInventario">
</ListView>
</LinearLayout>
Paso 9.
Ahora ya que tenemos los fragmentos listo procederemos a crear una clase que es la que nos permitirá insertar los fragmentos en la Actividad Principal para ello crearemos un paquete llamado Librerias :

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

una vez creada la clase pondremos el siguiente código:
public class NonSwipeableViewPager extends ViewPager {
public NonSwipeableViewPager(Context context) {
super(context);
setMyScroller();
}
public NonSwipeableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setMyScroller();
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// Never allow swiping to switch between pages
return false;
}
//down one is added for smooth scrolling
private void setMyScroller() {
try {
Class<?> viewpager = ViewPager.class;
Field scroller = viewpager.getDeclaredField("mScroller");
scroller.setAccessible(true);
scroller.set(this, new MyScroller(getContext()));
} catch (Exception e) {
e.printStackTrace();
}
}
public class MyScroller extends Scroller {
public MyScroller(Context context) {
super(context, new DecelerateInterpolator());
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
}
}
}
ahora en el archivo xml llamada contentPrincipal en la carpeta layout agregamos el siguiente componente que es la clase que creamos:
<librerias.NonSwipeableViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/paginador">
</librerias.NonSwipeableViewPager>
Paso 10.
Una vez que hayamos creado la clase anterior y la hayamos agregado al content principal procedemos a crear una clase que sera la encargada de indicarnos cual fragmento se tiene que observar al igual este nos permitirá estar cambiándolos, esta clase sera llamada PaginasAdapter y la crearemos dentro del paquete librerias. la cual quedaría de la siguiente manera:
public class PaginasAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
public PaginasAdapter(FragmentManager fm, int NumOfTabs) {
super(fm);
this.mNumOfTabs = NumOfTabs;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
PortadaFragment tab0 = new PortadaFragment();
return tab0;
case 1:
RegistrarFragment tab1 = new RegistrarFragment();
return tab1;
case 2:
ConsultarFragment tab2 = new ConsultarFragment();
return tab2;
case 3:
VentasFragment tab3 = new VentasFragment();
return tab3;
case 4:
InventarioFragment tab4 = new InventarioFragment();
return tab4;
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
Nota: te marcara error en los nombres de los fragmentos, recuerda que solo hay que importarlos.
ahora en la clase Java PrincipalActivity.java modificamos el codigo para que podamos cambiar de fragmentos quedando la clase de la siguiente manera:
ViewPager viewpager; //objeto para mostrar los fragmentos
PaginasAdapter adapterpg; //objeto para cambiar de fragmento
DrawerLayout drawer; //objeto que ´permite mostrar la barra deslizable
Toolbar toolbar; //Barra donde se pone el icono de la barra deslizable
ActionBarDrawerToggle toggle; //objeto que permite manipular la Barra deslizable
NavigationView navigationView; //objeto que me permite elegir en el menu
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
viewpager=(ViewPager) findViewById(R.id.paginador);
//inicializamos el objeto Pager con la cantidad de ventanas a manipular
adapterpg=new PaginasAdapter(getSupportFragmentManager(), 5);
viewpager.setAdapter(adapterpg);
viewpager.setEnabled(false);
toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.principal, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_principal) {
viewpager.setCurrentItem(0);
toolbar.setTitle("Portada");
} else if (id == R.id.nav_registrar) {
viewpager.setCurrentItem(1);
toolbar.setTitle("Registrar");
} else if (id == R.id.nav_consultar) {
viewpager.setCurrentItem(2);
toolbar.setTitle("Consultar");
} else if (id == R.id.nav_ventas) {
viewpager.setCurrentItem(3);
toolbar.setTitle("Ventas");
} else if (id == R.id.nav_inventario) {
viewpager.setCurrentItem(4);
toolbar.setTitle("Inventario");
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
Nota: si observamos los cambios solo se hicieron en el metodo onCreate y en el metodo onNavigationItemSelected.
En este momento si corres la aplicación observaras el fragmento portada y al abrir la barra de navegación que esta al lado izquierdo y seleccionando los menús cambiaran los fragmentos, ahora solo falta dar las acciones para que nuestra aplicación funcione completamente.
Paso 11.
Para poder continuar tendremos que descargar unas librerías que serán necesarias para que podamos usar la función de escaneo por código de barras la cual la obtenemos de la pagina: https://github.com/zxing/zxing

al descargar el archivo comprimido, extraemos su contenido quedando una carpeta llamada zxing-master la cual abriremos y entraremos a la siguiente ruta:
zxing-master\android-integration\src\main\java\com\google\zxing\integration\android
dentro de esta encontraremos dos archivos llamados: IntentIntegrator e IntentResult los cuales copiaremos seleccionándolos y oprimiendo las teclas de CTRL+C una vez hecho esto nos vamos a nuestro android studio y en la carpeta librerias daremos Click Derecho Pegar y aparecera una ventana como la siguiente en la cual le daremos OK:

con esto se habran copiado las dos clases que son las necesarias para activar el lector de codigo de barras.
Paso 12.
Para poder iniciar con las acciones de cada una de los fragmentos crearemos unas clases que seran de ayuda y de gran utilidad para nuestra aplicación y unos archivos XML para su funcionamiento. todas las clases serán creadas en la carpeta librerias, y los Archivos XML en la carpeta layout.
Inciamos con los Archivos XML, damos Click derecho sobre la carpeta layout y en New-XML-Layout XML File

Le pondremos el nombre de elementos_lista:

y su código quedaría de la siguiente manera, el cual se utilizara para poder poner la información de los productos dentro de la ListView que se encuentra en Inventario y en Consultar:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center|top">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="Codigo:"
android:textSize="25dp"/>
<TextView
android:id="@+id/txtCodLista"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Codigo"
android:layout_weight="1"
android:textSize="25dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:text="Descripcion del Producto"
android:textSize="20dp"/>
<TextView
android:id="@+id/txtDescLista"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="a"
android:textSize="20dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="Precio:"
android:textSize="20dp"/>
<TextView
android:id="@+id/txtPrecLista"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Precio"
android:layout_weight="1"
android:textSize="20dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:text="Cantidad:"
android:textSize="20dp"/>
<TextView
android:id="@+id/txtCantLista"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Cantidad"
android:layout_weight="1"
android:textSize="20dp"/>
</LinearLayout>
</LinearLayout>
con el mismo procedimiento ahora creamos el archivo XML llamado: elementos_ventas_lista.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center|top">
<TextView
android:id="@+id/txtCodVent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Codigo"
android:textSize="20dp"/>
<TextView
android:id="@+id/txtDescVent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:text="DescripcionProducto"
android:textSize="20dp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txtPrecVent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:textSize="20dp"
android:text="$ 00.00"/>
<librerias.NoSeleccionableSpinner
android:id="@+id/spinListVent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:paddingLeft="150dp"
android:layout_weight="1"
android:layout_gravity="left">
</librerias.NoSeleccionableSpinner>
</LinearLayout>
<Button
android:id="@+id/btnAgregarVentas"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Agregar"
android:textSize="15dp"/>
</LinearLayout>
con el mismo procemiento ahora creamos el archivo XML llamado: dialogo_buscar.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center|top"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Buscando"
android:textStyle="bold"
android:textSize="20dp"
android:gravity="center"
android:textColor="@android:color/holo_green_light"
android:layout_marginTop="8dp"/>
</LinearLayout>
con el mismo procemiento ahora creamos el archivo XML llamado: dialogo_grabando.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center|top"
android:orientation="vertical" >
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Grabando Datos"
android:textStyle="bold"
android:textSize="20dp"
android:gravity="center"
android:textColor="@android:color/holo_green_light"
android:layout_marginTop="8dp"/>
</LinearLayout>
ahora crearemos las clases Java iniciamos con Producto:
Clase Producto:
public class Producto {
String codigo;
String descripcion;
String precio;
int cantidad;
public Producto(String codigo, String descripcion, String precio, int cantidad) {
this.codigo = codigo;
this.descripcion = descripcion;
this.precio = precio;
this.cantidad = cantidad;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public String getPrecio() {
return precio;
}
public void setPrecio(String precio) {
this.precio = precio;
}
public int getCantidad() {
return cantidad;
}
public void setCantidad(int cantidad) {
this.cantidad = cantidad;
}
}
Clase ListaAdapter:
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.profeluismitre.mitienda.R;
public class ListaAdapter extends ArrayAdapter<Producto> {
public ListaAdapter(Context context) {
super(context, R.layout.elementos_lista,R.id.txtCodLista);
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView txtCodigo= (TextView) view.findViewById(R.id.txtCodLista);
TextView txtDescripcion=(TextView) view.findViewById(R.id.txtDescLista);
TextView txtPrecio=(TextView) view.findViewById(R.id.txtPrecLista);
TextView txtCantidad=(TextView) view.findViewById(R.id.txtCantLista);
Producto prod = getItem(position);
txtCodigo.setText(prod.getCodigo());
txtDescripcion.setText(prod.getDescripcion());
txtPrecio.setText(prod.getPrecio());
txtCantidad.setText(String.valueOf(prod.getCantidad()));
return view;
}
}
Nota: En los import de la clase deberas cambiar el nombre del paquete del Import com.profeluismitre.mitienda.R por el nombre del paquete de tu proyecto y lo terminas con la R mayuscula.
Clase MiBaseDatos:
public class MiBaseDatos {
public static ArrayList<Producto> productos=new ArrayList();
public static String codigo;
public static boolean escaneo=false;
}
Clase NoSeleccionableSpinner:
public class NoSeleccionableSpinner extends android.support.v7.widget.AppCompatSpinner {
public NoSeleccionableSpinner(Context context) {
super(context);
}
public NoSeleccionableSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NoSeleccionableSpinner(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setPressed(boolean pressed) {
// Make sure the parent is a View prior casting it to View
if (pressed && getParent() instanceof View && ((View) getParent()).isPressed()) {
return;
}
super.setPressed(pressed);
}
}
Clase VentasBaseAdapter:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import com.profeluismitre.mitienda.R;
public class VentasBaseAdapter extends BaseAdapter {
Context contexto;
ArrayList<Producto> listaproducto;
LayoutInflater inflater;
accionBotonVentas listener;
public VentasBaseAdapter(Context contexto, ArrayList<Producto> listaproducto, accionBotonVentas listener) {
this.contexto = contexto;
this.listaproducto = listaproducto;
this.listener=listener;
}
@Override
public int getCount() {
return listaproducto.size();
}
@Override
public Object getItem(int i) {
return listaproducto.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int posicion, View convertView, ViewGroup parent) {
TextView codigo;
TextView descripcion;
TextView precio;
final Spinner spinner;
Button btnAgregar;
inflater = (LayoutInflater) contexto.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.elementos_ventas_lista, parent, false);
codigo = (TextView) itemView.findViewById(R.id.txtCodVent);
descripcion = (TextView) itemView.findViewById(R.id.txtDescVent);
precio = (TextView) itemView.findViewById(R.id.txtPrecVent);
spinner = (Spinner) itemView.findViewById(R.id.spinListVent);
btnAgregar=(Button)itemView.findViewById(R.id.btnAgregarVentas);
List<String> numeros = new ArrayList<String>();
final Producto prod=listaproducto.get(posicion);
for (int x = 1; x <= prod.getCantidad(); x++) {
numeros.add(String.valueOf(x));
}
codigo.setText("Codigo: "+prod.getCodigo());
descripcion.setText(prod.getDescripcion());
precio.setText("$ " +prod.getPrecio());
spinner.setAdapter(new ArrayAdapter<String>(contexto, android.R.layout.simple_spinner_item, numeros));
btnAgregar.setTag(posicion);
btnAgregar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int cantidad=spinner.getSelectedItemPosition()+1;
listener.calcularTotal(cantidad,
Double.parseDouble(prod.getPrecio()));
}
});
return itemView;
}
}
Nota: En los import de la clase deberas cambiar el nombre del paquete del Import com.profeluismitre.mitienda.R por el nombre del paquete de tu proyecto y lo terminas con la R mayuscula.
Clase (Interface) accionBotonVentas:
a diferencia de las demas clases al poner el nombre de la clase le cambiaremos a interface:

y el código quedaría de la siguiente manera:
public interface accionBotonVentas {
void calcularTotal(int cantidad, double precio);
}
Paso 13.
Ahora ya creamos las clases necesarios, entonces iniciamos con las acciones de los fragmentos empezando por el mas Fácil al Mas Difícil:
Fragmento Inventario
public class InventarioFragment extends Fragment {
//creamos los objetos necesarios para esta clase
//lista es el objeto que nos mostrara los porductos existentes
ListView lista;
//el adaptador es el encargado de generar las ventanas que iran dentro de la lista
ListaAdapter adaptador;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_inventario, container, false);
}
public void onStart(){
super.onStart();
//inicializamos los objetos
lista=(ListView)getView().findViewById(R.id.listaInventario);
adaptador=new ListaAdapter(getContext());
//mandamos llamar el metodo que generara la lista
buscar();
adaptador.notifyDataSetChanged();
//agregamos los elementos generamos a la lista
lista.setAdapter(adaptador);
}
//metodo que arma el listado de productos
public void buscar(){
for (int x = 0; x< MiBaseDatos.productos.size(); x++){
Producto prod=MiBaseDatos.productos.get(x);
adaptador.add(prod);
}
}
}
Fragmento Consultar:
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import librerias.ListaAdapter;
import librerias.MiBaseDatos;
import librerias.Producto;
public class ConsultarFragment extends Fragment implements View.OnClickListener {
// creamos los objetos necesarios
ListView lista;
Button btnBuscar;
EditText txtDescripcion;
ListaAdapter adaptador;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_consultar, container, false);
}
public void onStart(){
super.onStart();
//inicializamos los objetos
lista=(ListView)getView().findViewById(R.id.listaConsultas);
btnBuscar=(Button)getView().findViewById(R.id.btnBusCons);
txtDescripcion=(EditText)getView().findViewById(R.id.txtDescConsultar);
adaptador=new ListaAdapter(getContext());
//le agregamos accion al btnBuscar
btnBuscar.setOnClickListener(this);
adaptador.notifyDataSetChanged();
//agregamos los elementos a la lista
lista.setAdapter(adaptador);
}
@Override
public void onClick(View view) {
//cuando se oprima el boton buscar se ejecuta la tarea asincrona
if(view.getId()==R.id.btnBusCons){
new TareaAsincrona().execute();
}
}
//el metodo buscar sera el encargado de buscar todos los productos que coincidan
public void buscar(String descripcion){
int num=lista.getCount();
adaptador.clear();
for(int x = 0; x< MiBaseDatos.productos.size(); x++){
Producto prod=MiBaseDatos.productos.get(x);
//en metodo indexOf compara los caracteres de la busqueda
int res=prod.getDescripcion().indexOf(descripcion);
//si la condicion se cumple se agrega al adaptador
if(res!=-1){
adaptador.add(prod);
}
}
adaptador.notifyDataSetChanged();
lista.setAdapter(adaptador);
}
// la tarea asincrona es la encargada de mostrar nuestra barra de progreso la cual
// se muestra por 2 segundos y posteriormente se muestra el resultado obtenido
private class TareaAsincrona extends AsyncTask<Void, Void, String> {
//el objeto nDialog es nuestra barra de progreso
private ProgressDialog nDialog;
public TareaAsincrona() {
nDialog = new ProgressDialog(getActivity());
}
@Override
protected String doInBackground(Void... voids) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
protected void onPreExecute() {
nDialog.show();
nDialog.setContentView(R.layout.dialogo_buscando);
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (nDialog.isShowing()) {
nDialog.dismiss();
buscar(txtDescripcion.getText().toString());
}
}
}
}
Fragmento Registrar:
Primeramente para poder hacer funcionar el lector de código de barras agregaremos el siguiente método dentro de la clase PrincipalActivity.java:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
// retrieve scan result
IntentResult scanningResult = IntentIntegrator.parseActivityResult(
requestCode, resultCode, intent);
if (scanningResult != null) {
// we have a result
String scanContent = scanningResult.getContents();
MiBaseDatos.codigo=scanContent;
MiBaseDatos.escaneo=true;
} else {
Toast.makeText(getApplicationContext(),
"No scan data received!", Toast.LENGTH_SHORT).show();
}
}
una vez agregado lo anterior nuestro fragmento quedaría de la manera siguiente:
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import librerias.IntentIntegrator;
import librerias.MiBaseDatos;
import librerias.Producto;
public class RegistrarFragment extends Fragment implements View.OnClickListener {
//creamos los objetos necesarios
Button btnScaner, btnGrabar, btnCancelar;
EditText txtCodigo;
EditText txtDescripcion;
EditText txtPrecio;
EditText txtCantidad;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_registrar, container, false);
}
public void onStart(){
super.onStart();
//inicializamos los objetos
btnScaner=(Button) getView().findViewById(R.id.btnScanerRegistro);
btnGrabar=(Button) getView().findViewById(R.id.btnGrabarReg);
btnCancelar=(Button) getView().findViewById(R.id.btnCancelarReg);
txtCodigo=(EditText)getView().findViewById(R.id.txtCodigoRegistro);
txtDescripcion=(EditText)getView().findViewById(R.id.txtDesRegistro);
txtPrecio=(EditText)getView().findViewById(R.id.txtPresRegistro);
txtCantidad=(EditText)getView().findViewById(R.id.txtCantRegistro);
//agregamos acciones a los botones
btnScaner.setOnClickListener(this);
btnGrabar.setOnClickListener(this);
btnCancelar.setOnClickListener(this);
}
//este metodo es el encargado de almacenar los datos en los arreglos
public void grabar(){
String codigo=txtCodigo.getText().toString();
String descripcion=txtDescripcion.getText().toString();
String precio=txtPrecio.getText().toString();
int cantidad=Integer.parseInt(txtCantidad.getText().toString());
MiBaseDatos.productos.add(new Producto(codigo,descripcion,precio,cantidad));
}
//este metodo es el encargado de limpiar las cajas de texto
public void cancelar(){
txtCodigo.setText("");
txtCantidad.setText("");
txtPrecio.setText("");
txtDescripcion.setText("");
txtCodigo.requestFocus();
MiBaseDatos.escaneo=false;
}
//en este metodo establecemos las acciones que haran cada uno de los botones
@Override
public void onClick(View view) {
//Se responde al evento click y si el boton oprimido es el Scaner
if(view.getId()==R.id.btnScanerRegistro){
//Se instancia un objeto de la clase IntentIntegrator
IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
//Se procede con el proceso de scaneo
scanIntegrator.initiateScan();
//accion del boton grabar
}else if(view.getId()==R.id.btnGrabarReg){
new TareaAsincrona().execute();
grabar();
//accion del boton Cancelar
}else if(view.getId()==R.id.btnCancelarReg){
cancelar();
}
}
//cuando se cierra el lector de codigo de barras activamos el metodo
//onResume que es cuando vuelve en si el fragmento
//en el cual verificamos si se escaneo
public void onResume(){
super.onResume();
if(MiBaseDatos.escaneo) {
txtCodigo.setText(MiBaseDatos.codigo);
MiBaseDatos.escaneo=false;
}
}
// tarea que nos muestra el dialogo de grabando y posteriormente almacena.
private class TareaAsincrona extends AsyncTask<Void, Void, String> {
private ProgressDialog nDialog;
String boton;
public TareaAsincrona(){
nDialog = new ProgressDialog(getActivity()); //Here I get an error: The constructor ProgressDialog(PFragment) is undefined
this.boton=boton;
}
@Override
protected String doInBackground(Void... voids) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
protected void onPreExecute() {
nDialog.show();
nDialog.setContentView(R.layout.dialogo_grabando);
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (nDialog.isShowing()) {
nDialog.dismiss();
cancelar();
}
}
}
}
Fragmento Ventas:
el Fragmento quedaria de la siguiente manera:
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import librerias.IntentIntegrator;
import librerias.MiBaseDatos;
import librerias.Producto;
import librerias.VentasBaseAdapter;
import librerias.accionBotonVentas;
public class VentasFragment extends Fragment implements accionBotonVentas,
View.OnClickListener {
//creamos los objetos necesarios para trabajar
ListView lista;
VentasBaseAdapter adaptadorBase;
Button btnScaner, btnCobrar;
EditText txtCodigo;
//la variable total llevara la suma de los productos comprados
double total=0;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_ventas, container, false);
}
public void onStart() {
super.onStart();
//inicializamos los objetos
lista=(ListView)getView().findViewById(R.id.listaVentas);
btnScaner=(Button)getView().findViewById(R.id.btnScanerVentas);
btnCobrar=(Button)getView().findViewById(R.id.btnCobrarVentas);
txtCodigo=(EditText)getView().findViewById(R.id.txtCodigoVentas);
//asignamos las acciones a los botones
btnScaner.setOnClickListener(this);
btnCobrar.setOnClickListener(this);
}
//establecemos el comportamiento de los botones
@Override
public void onClick(View view) {
if(view.getId()==R.id.btnScanerVentas){
//si el boton presionado es el de escaner
MiBaseDatos.escaneo=true;
//Se instancia un objeto de la clase IntentIntegrator
IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
//Se procede con el proceso de scaneo
scanIntegrator.initiateScan();
}else if(view.getId()==R.id.btnCobrarVentas){
//si el boton oprimido es cobre se muestra el total a pagar e inicializamos a cero
Toast.makeText(getContext(), "El Total es:"+String.valueOf(total), Toast.LENGTH_SHORT).show();
total=0;
}
}
//cuando se escaneo y vuelve en si la plicacion verificamos si se obtubo un codigo
//y si es correcto se manda a llamar la tarea asincrona indicando que se esta buscando
public void onResume(){
super.onResume();
if(MiBaseDatos.escaneo){
txtCodigo.setText(MiBaseDatos.codigo);
MiBaseDatos.escaneo=false;
new TareaAsincrona().execute();
}
}
//este metodo es el encargado de verificar que el codigo escaneado exista y si existe nos muestra
//la opcion para la venta
public void buscar(){
ArrayList<Producto> productos=new ArrayList();
for(int x=0;x< MiBaseDatos.productos.size();x++){
Producto prod=MiBaseDatos.productos.get(x);
if(prod.getCodigo().equals(txtCodigo.getText().toString())) {
productos.add(prod);
}
}
//una vez encontrado el producto se agrega al adaptador para asignarlo a la lista
adaptadorBase= new VentasBaseAdapter(getContext(),productos,this);
adaptadorBase.notifyDataSetChanged();
lista.setAdapter(adaptadorBase);
MiBaseDatos.codigo="";
}
//metodo que se ejecuta al oprimir el boton agregar del producto buscado
@Override
public void calcularTotal(int cantidad, double precio) {
double total=cantidad*precio;
Toast.makeText(getContext(), "Agregando a Total:"+String.valueOf(total), Toast.LENGTH_SHORT).show();
this.total=this.total+total;
}
//tarea asincrona que nos muestra el mensaje de buscar antes de mostrar el resultado..
private class TareaAsincrona extends AsyncTask<Void, Void, String> {
private ProgressDialog nDialog;
public TareaAsincrona(){
nDialog = new ProgressDialog(getActivity()); //Here I get an error: The constructor ProgressDialog(PFragment) is undefined
}
@Override
protected String doInBackground(Void... voids) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
protected void onPreExecute() {
nDialog.show();
nDialog.setContentView(R.layout.dialogo_buscando);
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (nDialog.isShowing()) {
nDialog.dismiss();
//una vez que pasa el tiempo se procede a buscar el producto
buscar();
}
}
}
}
