Vistas de página en total

lunes, 15 de octubre de 2012

Programación Android con AIDE y Java 7
Dirección de EYDH
Una de las metas intelectuales que establecí en mi proyecto de vida fue el de llegar a crear un programa de la base de conocimientos de la Evolución y Desarrollo Humano en mi teléfono inteligente. Para lograrlo fue necesario aprender el lenguaje java orientado a objetos y programar android con AIDE. Para seguir aprendiendo nuevos conocimientos del lenguaje Java, la única forma es estudiar y repetir tantas veces como sea necesario, los conceptos y fundamentos del lenguaje Java hasta comprenderlos y que se queden grabados en la mente. Un reforzamiento es comprender lo que es una base de conocimientos EYDH, los telefonos inteligentes, la computadora de un teléfono inteligente y además realizar muchos ejemplos, desde los más sencillos hasta los más complicados, como los que hemos visto en los blog anteriores y el que veremos en este blog.
Base de Conocimientos EYDH
Telefonos Inteligentes
Computadora de un Teléfono Inteligente
Programación Android con AIDE y Java 1
P01 Mi Primer Programa  y el de una Calculadora
Programación Android con AIDE y Java 2
 P02 y Lenguaje Java Orientado a Objetos
Programación Android con AIDE y Java 3
P03_variables
P04_string
P05_entrada_salida
P06_if
Programación Android con AIDE y Java 4P07_control_switch
P08_while
P09_for_arreglos
P10_arreglos_lista
Programación Android con AIDE y Java 5
P11_temas_lista
Programación Android con AIDE y Java 6
 P12_temas_objeto
Programación Android con AIDE y Java 7
P13_temas_listview


La herramienta AIDE se usa para programar Android con Java la computadora de un teléfono inteligente. AIDE significa Android Integrated Development Environment y es un Ambiente de Desarrollo Integrado para Android con el lenguaje Java. Con este sistema se pueden desarrollar y crear programas en el mismo teléfono celular que tengan como sistema operativo android 2.2. Por lo tanto para desarrollar programas es necesario tener un teléfono inteligente o móvil celular como el que tengo, un Samsung Galaxy mini con el sistema operativo android 2.2. Para adquirir AIDE se debe usar el internet del teléfono y de conectarse al mercado o play store de android, buscar AIDE que es libre, bajarlo e instalarlo y listo se puede iniciar a programar. Es fabuloso! programar en una mano la computadora de un teléfono inteligente.

P13_temas_listview

Este ejemplo trata del manejo de nombres en general y de los nombres de un tema en específico y su descripción. En la Evolución y Desarrollo Humano hago una descripción de la secuencia en una línea del tiempo, del pasado, presente y futuro de la humanidad.  El pasado se inicia con la evolución física, biológica y social, el presente de la vida actual de todo ser humano y el futuro de los hechos que pueden suceder de forma catastrófica y aleatoria y que puedan afectar a la humanidad. Cada secuencia en el tiempo considero un tema fundamental con un nombre y una descripción, así en la evolución física inicio con el tema de un principio, continúo con las cuerdas y membranas, gran explosión, partículas fundamentales, gravitón, quarks, núcleo atómico, electrones, átomo,  moléculas, gas y polvo cósmico, galaxias, universo, sistema solar, tierra, etc. Continúa los temas de la evolución biológica y social. Los temas del presente y del futuro. Todos los temas con su nombre y descripción. El programa maneja los temas en el teléfono inteligente tal como el Galaxi mini que tiene el sistema operativo android2.2.
Este programa trata los temas como un objeto y se define como la clase de Temas con su nombre y descripción, se puede ver como el uso de la programación orientada a objetos de Java, facilita el manejo de varios datos, creando registros que pueden almacenarse en un solo archivo.



El programa utiliza dos pantallas, con Intent se pasa de una pantalla a la otra. La primera es la principal que tiene un botón de agregar temas y un ListView que despliega los nombres de temas. Cuando se presiona el botón de agregar aparece una segunda pantalla que se utiliza para introducir uno a varios temas por nombre y descripción, primero presionamos borrar, se escribe el nombre y después la descripción se presiona el boto de Introduce, cuando se termina de introducir los temas deseados se presiona el botón de Guardar y almacenan los temas y se regresa a la primera pantalla, donde se despliega con un ListView los temas. En esa lista con ListView se selecciona algún nombre del tema, se presiona y se sostiene el dedo unos instantes y aparece un menú con la opción de Desplegar y Eliminar temas. Con la opción de Desplegar aparece la segunda pantalla con el nombre y descripción del tema seleccionado, donde puede leerse el tema por nombre y descripción, también puede modificar el nombre o la descripción del tema.  Al terminar la modificación o de leer, se presiona el botón de Modificar y se regresa a la primera pantalla. Con la opción de Eliminar se borra el tema seleccionado y se despliega la lista con ListView con los temas actualizados.
Creamos un nuevo proyecto P13_temas_listview, en modulo ponemos com.gri.p13 presionamos el folder src y vamos al programa MainActivity.java presionamos Archivos y creamos un nuevo archivo con el nombre de Temas.java editamos e introducimos el siguiente programa para crear la clase de Temas.
package com.gri.p13;

public class Temas
{
    private String nomb;
    private String desc;

    public Temas(String nomb, String desc){
        this.nomb = nomb;
        this.desc = desc;
    }

    public void ponNomb(String nomb){
        this.nomb = nomb;
    }

    public String obtenNomb(){
        return nomb;
    }

    public void ponDesc(String desc){
        this.nomb = desc;
    }

    public String obtenDesc(){
        return desc;
    }
}//class

Ahora vamos al programa MainActivity.java editamos e introducimos el siguiente programa.
package com.gri.p13;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
import android.view.View.OnClickListener;
import java.util.ArrayList;
import android.content.Intent;
import java.io.*;
import android.graphics.*;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.ContextMenu;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.content.*;
import java.util.*;

public class MainActivity extends Activity implements OnClickListener
{
    LinearLayout ll1;
    TextView tv1;
    Button b1;
    Button b2;
    ListView lv1;
    ArrayList<String> lista = new ArrayList<String>();
    ArrayList<String> lista1 = new ArrayList<String>();
    ArrayList<Temas> lista2 = new ArrayList<Temas>();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        ll1 = new LinearLayout(this);
        ll1.setOrientation(LinearLayout.VERTICAL);

        LinearLayout ll2 = new LinearLayout(this);
        ll2.setOrientation(LinearLayout.HORIZONTAL);

        b1 = new Button(this);
        b1.setText("Agregar");
        ll2.addView(b1);

        tv1 = new TextView(this);
        tv1.setText("       Temas");
        tv1.setTextSize(25);
        //tv.setTypeface(Typeface.BOLD);
        tv1.setTextColor(Color.CYAN);
        tv1.setGravity(0x01);       
        ll2.addView(tv1);

        ll1.addView(ll2);

        lv1 = new ListView(this);
        ll1.addView(lv1);
               
        //Recupera archivo de temas
        try{
            BufferedReader br1 = new BufferedReader(new InputStreamReader
                    (openFileInput("temas.txt")));
            String lt1;
            while((lt1 = br1.readLine()) != null){
                String lt2[] = lt1.split("##");
                String nomb2 = lt2[0];
                String desc2 = lt2[1];
                Temas temas2 = new Temas(nomb2, desc2);
                lista2.add(temas2);
                lista.add(nomb2);
                lista1.add(desc2);
            }   
            br1.close();
        }catch(Exception ex){
            tv1.setText("Agrega temas...Error lectura");
        }       

        ArrayAdapter<String> adaptador = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,lista);       
        lv1.setAdapter(adaptador);
        registerForContextMenu(lv1);

        setContentView(ll1);       

        lv1.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> padre, View v, int posicion,long id) {
                    Toast.makeText(v.getContext(),padre.getItemAtPosition(posicion).toString() , Toast.LENGTH_SHORT).show();               
                }
            });

        b1.setOnClickListener(new View.OnClickListener(){
                public void onClick(View view){
                    Intent i1 = new Intent(MainActivity.this, ProcTemas.class);
                    startActivity(i1);
                }
            });

    }//oncreate
   
    public void onClick(View view){}
   
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderTitle("Menu");
        menu.add(0, v.getId(), 0, "Despliega");
        menu.add(0, v.getId(), 0, "Elimina");
    }   

    @Override
    public boolean onContextItemSelected(MenuItem item){
        AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
        if(item.getTitle() == "Despliega"){
            int idx1 = info.position;           
            Intent i2 = new Intent(MainActivity.this, ProcTemas.class);
            i2.putExtra("vint", idx1);
            startActivity(i2);
        }else if(item.getTitle() == "Elimina"){
            int idx2 = info.position;
            eliminar(idx2);       
        }               
        else{return false;}
        return true;
    }       

    public void eliminar(int idx2){
        //final int idx2a = idx2;
        lista2.remove(idx2);               
        try{
            OutputStreamWriter osw1 = new OutputStreamWriter(
                openFileOutput("temas.txt", Context.MODE_PRIVATE));                       
            Iterator items = lista2.iterator();                       
            while(items.hasNext()){
                Temas temas2 =(Temas)items.next();                   
                osw1.write(temas2.obtenNomb()+"##"+temas2.obtenDesc()+"\n");
            }                              
            osw1.close();                       
        }catch(Exception ex){
            tv1.append("Error al crear archivo...");
        }               
        Intent i3 = new Intent(MainActivity.this, MainActivity.class);
        startActivity(i3);       
    }//eliminar
   
}//class

Creamos un nuevo archivo con el nombre de ProcTemas,java editamos e introducimos el siguiente programa.
package com.gri.p13;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import android.view.View.OnClickListener;
import java.util.ArrayList;
import android.graphics.Color;
import java.io.*;
import android.content.Context;
import android.text.method.*;
import android.content.*;
import java.util.*;

public class ProcTemas extends Activity implements OnClickListener
{
    Button b1;
    Button b2;
    Button b3;
    Button b4;
       
    EditText et1;
    EditText et2;
   
    TextView tv2;
    //Strings para captar temas de et1 y et2
    String t1, t2;   
    //Arreglo lista para guardar temas
    ArrayList<String> lista = new  ArrayList<String>();
    ArrayList<String> lista1 = new  ArrayList<String>();
    ArrayList<Temas> lista2 = new ArrayList<Temas>();
    int Idx1 = -1;
    int cont1 = 0;
    // Called when the activity is first created.
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        LinearLayout ll = new LinearLayout(this);
        ll.setOrientation(LinearLayout.VERTICAL);
        TextView tv = new TextView(this);
        tv.setText("Temas");
        tv.setTextSize(20);
        //tv.setTypeface(Typeface.BOLD);
        tv.setTextColor(Color.CYAN);
        tv.setGravity(0x01);
        ll.addView(tv);
        LinearLayout ll1 = new LinearLayout(this);
        ll1.setOrientation(LinearLayout.HORIZONTAL);
        b1 = new Button(this);
        b1.setText(" Introd ");
        ll1.addView(b1);
        b2 = new Button(this);
        b2.setText(" Borra ");
        ll1.addView(b2);       
        b3 = new Button(this);
        b3.setText("Guarda ");
        ll1.addView(b3);
        b4 = new Button(this);
        b4.setText("Modifica");
        ll1.addView(b4);
        ll.addView(ll1);   

        et1 = new EditText(this);
        et1.setText("Borra e Introduce Nombre de Tema");
        ll.addView(et1);
       
        et2 = new EditText(this);
        et2.setMaxLines(15);
        //et2.setTextSize(16);
        et2.setText("Borra e Introduce Descripcion de Tema");
        ll.addView(et2);               
   
        setContentView(ll);

        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        b3.setOnClickListener(this);
        b4.setOnClickListener(this);
       
        //Recupera archivo de temas
        try{
            BufferedReader br1 = new BufferedReader(new InputStreamReader
                  (openFileInput("temas.txt")));
            String lt1;
            while((lt1 = br1.readLine()) != null){
                String lt2[] = lt1.split("##");
                String nomb2 = lt2[0];
                String desc2 = lt2[1];
                lista.add(nomb2);
                lista1.add(desc2);
            }   
            br1.close();
        }catch(Exception ex){
            et1.setText("Introduce tema...Error lectura");
        }       
        Bundle datos = this.getIntent().getExtras();
        if(datos != null){
            Idx1 = datos.getInt("vint");           
            //Recupera archivo de temas
            try{
                BufferedReader br1 = new BufferedReader(new InputStreamReader
                    (openFileInput("temas.txt")));
                String lt1;
                while((lt1 = br1.readLine()) != null){
                    String lt2[] = lt1.split("##");
                    String nomb2 = lt2[0];
                    String desc2 = lt2[1];
                    Temas temas2 = new Temas(nomb2, desc2);
                    lista2.add(temas2);
                    lista.add(nomb2);
                    lista1.add(desc2);
                }   
                br1.close();
            }catch(Exception ex){
                et1.setText("Errorde lectura...");
            }
            et1.setText(lista.get(Idx1));
            et2.setText(lista1.get(Idx1));
        }//if
    }
   
    //@Override
    public void onClick(View view){       
    if(view == b1){           
        t1 = et1.getText().toString();
        t2 = et2.getText().toString();           
        if(Idx1 == -1){           
            if(t1.equals("") || t2.equals("")){
                et1.setText("Espacios...Introduce nombre o descripcion de Tema");                                             
            }else{       
                 boolean duplicado = false;
                 for(int i=0; i<lista.size(); i++){
                     if(t1.equalsIgnoreCase(lista.get(i))){
                         duplicado = true;
                     }
                 }
                 if(duplicado){                   
                 et1.append("...Nombre de tema Duplicado...");                   
                 }else{               
                     //Agrega tema a lista2
                     Temas temas1 = new Temas(t1, t2);
                     lista2.add(temas1);           
                     et1.setText("...Fin captura de tema...");
                 }              
            }           
        }else{
            et1.append("...No se aplica Introd...");
        }
    }//b1

    if(view == b2){
        //Limpia pantalla et1 y et2
        et1.setText(" ");
        et2.setText(" ");
    }//b2
       
    if(view == b3){
        //Verifica que lista no este vacia
        if(Idx1 == -1){
            if(!lista2.isEmpty()){                   
                //Crea y guarda archivo interno               
                try{
                    OutputStreamWriter osw1 = new OutputStreamWriter(
                        openFileOutput("temas.txt", Context.MODE_APPEND));                       
                    Iterator items = lista2.iterator();                       
                    while(items.hasNext()){
                        Temas temas2 =(Temas)items.next();                   
                        osw1.write(temas2.obtenNomb()+"##"+temas2.obtenDesc()+"\n");
                    }                              
                    osw1.close();                       
                }catch(Exception ex){
                    et1.append("Error al crear archivo...");
                }
                Intent i1 = new Intent(ProcTemas.this, MainActivity.class);
                startActivity(i1);                   
            }else{
                et1.append("Lista de temas esta vacia...");
            }//empty
        }else{
            et1.append("...No se aplica Guarda...");
        }
    }//b3

    if(view == b4){
        if(Idx1 != -1){
            t1 = et1.getText().toString();
            t2 = et2.getText().toString();                                                                   
            if(t1.equals("") || t2.equals("")){
                et1.setText("Espacios...Introduce nombre o descripcion de Tema");
            }else{
                Temas temas1 = new Temas(t1, t2);
                lista2.set(Idx1, temas1);
                    //Crea y guarda archivo interno   
                try{
                    OutputStreamWriter osw1 = new OutputStreamWriter(
                        openFileOutput("temas.txt", Context.MODE_PRIVATE));                       
                    Iterator items = lista2.iterator();                       
                    while(items.hasNext()){
                        Temas temas2 =(Temas)items.next();                   
                        osw1.write(temas2.obtenNomb()+"##"+temas2.obtenDesc()+"\n");
                    }                              
                    osw1.close();                       
                }catch(Exception ex){
                    et1.append("Error al crear archivo...");
                }
                Intent i1 = new Intent(ProcTemas.this, MainActivity.class);
                startActivity(i1);
                }           
            }else{
                et1.setText("...No se aplica Modifica...");               
            }                                                           
        }//b4                    
    }//on click   
}//class

También hay que modificar el archivo de AndroidManifest para incluir las siguientes instrucciones de Intent.
<activity android:name=".ProcTemas">
      </activity>
El archivo se muestra a continuación.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gri.p13"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="11" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".MainActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

      <activity android:name=".ProcTemas">
      </activity>
       
    </application>
</manifest>
Como se explico en el proyecto P03_variables, vamos a compilar, instalar y ejecutar el proyecto y obtenemos los resultados deseados.



La pantalla de arriba muestra el inicio del programa.
La pantalla anterior muestra la captura de los temas.
La pantalla de arriba muestra la primera pantalla con nombres de temas en ListView.
La pantalla anterior muestra el menu al presionar un nombre del tema.
La pantalla de arriba muestra al presionar Despliega para leer o modificar el tema.
La pantalla anterior muestra la pantalla con el nombre de temas actualizado.