Foros del Web » Programando para Internet » Android »

como actualizar un listview personalizado

Estas en el tema de como actualizar un listview personalizado en el foro de Android en Foros del Web. buen dia, tengo un problema, tengo un listview que me muestra una lista de datos de manera personalizada, el problema q tengo es que si ...
  #1 (permalink)  
Antiguo 12/06/2011, 21:14
 
Fecha de Ingreso: noviembre-2008
Mensajes: 49
Antigüedad: 16 años, 1 mes
Puntos: 4
Exclamación como actualizar un listview personalizado

buen dia, tengo un problema, tengo un listview que me muestra una lista de datos de manera personalizada, el problema q tengo es que si solo hay un solo elemento y lo elimino me marca una exception de NullPointer, al parecer es por q ps en la tabla de la base de datos no tengo ya registros y he estado intentando evitar q se de esa excepcion, ojala me puedan ayudar
  #2 (permalink)  
Antiguo 14/06/2011, 03:20
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 9 meses
Puntos: 12
Respuesta: como actualizar un listview personalizado

Hola,

Haznos un favor, escribe bien, que esto no es un SMS.

¿qué elemento?

La aplicación está esperando un valor, y no llega, llega null, por eso la excepción.

¿no puedes poner algo de código o el log?
  #3 (permalink)  
Antiguo 14/06/2011, 11:55
 
Fecha de Ingreso: noviembre-2008
Mensajes: 49
Antigüedad: 16 años, 1 mes
Puntos: 4
Exclamación Respuesta: como actualizar un listview personalizado

Si esa parte la entiendo bien pero el detalle es q cuando ejecuto la aplicacion por primera vez no marca esa excepcion, lo q hago es q verifico si viene null, si es asi muestro un alert pidiendo q haga un registro, y despues mediante un menu contextual elimino un elemento del ListView y de la base de datos, y lo q hago es volver a cargar el arreglo dentro del ArrayAdapter, y me funciona siempre y cuando aun tenga elementos en el arreglo, pero si elimino el ultimo elemento del arreglo y la base de datos me marca esa excepcion, mi pregunta es como puedo evitar esa excepcion permitiendo recibir el null.

aqui dejo el codigo de la actividad donde hago todo el proceso:

Código JAVA:
Ver original
  1. package Password.Principal;
  2.  
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.database.Cursor;
  6. import android.os.Bundle;
  7. import android.view.ContextMenu;
  8. import android.view.ContextMenu.ContextMenuInfo;
  9. import android.view.LayoutInflater;
  10. import android.view.MenuInflater;
  11. import android.view.MenuItem;
  12. import android.view.View;
  13. import android.view.View.OnLongClickListener;
  14. import android.view.ViewGroup;
  15. import android.view.View.OnClickListener;
  16. import android.widget.AdapterView.AdapterContextMenuInfo;
  17. import android.widget.ArrayAdapter;
  18. import android.widget.CheckBox;
  19. import android.widget.CompoundButton;
  20. import android.widget.ImageButton;
  21. import android.widget.ListView;
  22. import android.widget.TextView;
  23. import android.widget.Toast;
  24. import usuario.Alerts;
  25. import usuario.ManejadorBD;
  26. import usuario.Password;
  27. import android.widget.CompoundButton.OnCheckedChangeListener;
  28.  
  29. public class Principal extends Activity {
  30.  
  31.     public Password[] datos = null;
  32.     public Alerts alerta = new Alerts();
  33.     public AdaptadorPasswords contras = null;
  34.     public ListView contrasenias = null;
  35.     public int posicion = 0,posId=0;
  36.     public ManejadorBD cnx = null;
  37.  
  38.  
  39.     /** Called when the activity is first created. */
  40.     @Override
  41.     public void onCreate(Bundle savedInstanceState) {
  42.         super.onCreate(savedInstanceState);
  43.         setContentView(R.layout.principal);
  44.         try {
  45.             datos=this.getPasswords();
  46.             if (datos == null) {
  47.                 alerta.showWarning("Registrar Passwords",
  48.                         "Debe registrar la información", Principal.this);
  49.             } else {
  50.                 contras = new AdaptadorPasswords(this);
  51.             }
  52.  
  53.             contrasenias = (ListView) findViewById(R.id.contrasenias);
  54.             contrasenias.setAdapter(contras);
  55.  
  56.             ImageButton añadir = (ImageButton) findViewById(R.id.agregar);
  57.             ImageButton borrar = (ImageButton) findViewById(R.id.eliminar);
  58.  
  59.             añadir.setOnClickListener(new OnClickListener() {
  60.  
  61.                 public void onClick(View v) {
  62.                     // TODO Auto-generated method stub
  63.                     Intent envio = new Intent(Principal.this, NewPassword.class);
  64.                     Bundle opc=new Bundle();
  65.                     opc.putString("operacion", "registrar");
  66.                     envio.putExtras(opc);
  67.                     setResult(RESULT_OK, envio);
  68.                     startActivity(envio);
  69.                 }
  70.             });
  71.  
  72.             borrar.setOnClickListener(new OnClickListener() {
  73.  
  74.                 @Override
  75.                 public void onClick(View v) {
  76.                     // TODO Auto-generated method stub
  77.  
  78.                 }
  79.             });
  80.         } catch (Exception e) {
  81.             alerta.showWarning("Error en la Aplicación",
  82.                     "Se ha producido un error", Principal.this);
  83.         } catch (Throwable e) {
  84.             // TODO Auto-generated catch block
  85.             alerta.showWarning("Error en la Aplicación",
  86.                     "Se ha producido un error", Principal.this);
  87.         }
  88.     }
  89.  
  90.     public void onCreateContextMenu(ContextMenu menu, View v,
  91.             ContextMenuInfo menuInfo) {
  92.         super.onCreateContextMenu(menu, v, menuInfo);
  93.  
  94.         MenuInflater inflater = getMenuInflater();
  95.         inflater.inflate(R.menu.menusecundario, menu);
  96.     }
  97.  
  98.     @Override
  99.     public boolean onContextItemSelected(MenuItem item) {
  100.  
  101.         @SuppressWarnings("unused")
  102.         AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
  103.                 .getMenuInfo();
  104.  
  105.         switch (item.getItemId()) {
  106.         case R.id.editar:
  107.             Intent envio = new Intent(Principal.this, NewPassword.class);
  108.             Bundle opc=new Bundle();
  109.             opc.putString("operacion", "editar");
  110.             opc.putInt("id", datos[posicion].getId());
  111.             envio.putExtras(opc);
  112.             setResult(RESULT_OK, envio);
  113.             startActivity(envio);
  114.             return true;
  115.         case R.id.eliminar:
  116.             Password pswd = new Password();
  117.             Toast msj2 = null;
  118.             if (pswd.eliminarPassword(Principal.this, datos[posicion].getId())) {
  119.                 msj2 = Toast.makeText(Principal.this,
  120.                         "El registro se ha eliminado correctamente... ", Toast.LENGTH_SHORT);
  121.                 msj2.show();
  122.                 datos=this.getPasswords();
  123.                 if(datos.length>0 || datos!=null){             
  124.                   contras=new AdaptadorPasswords(this);
  125.                   contrasenias.setAdapter(contras);
  126.                 }else{
  127.                     alerta.showWarning("Registrar Passwords",
  128.                             "Debe registrar la información", Principal.this);
  129.                 }
  130.                
  131.             } else {
  132.                 msj2 = Toast.makeText(Principal.this,
  133.                         "El registro no se ha podido eliminar correctamente.. "
  134.                                 + datos[posicion].getId(), Toast.LENGTH_SHORT);
  135.                 msj2.show();
  136.             }
  137.             return true;
  138.         case R.id.mostrar:
  139.             Intent envio2= new Intent(Principal.this,Contras.class);
  140.             Bundle idContra=new Bundle();
  141.             idContra.putInt("Id", datos[posicion].getId());
  142.             envio2.putExtras(idContra);
  143.             setResult(RESULT_OK, envio2);
  144.             startActivity(envio2);
  145.             return true;
  146.         default:
  147.             return super.onContextItemSelected(item);
  148.         }
  149.     }
  150.  
  151.     public Password[] getPasswords(){
  152.         Password[] psws=null;
  153.         cnx = new ManejadorBD(Principal.this, "passwordsBD", 1, 'r');
  154.         Cursor c = cnx.consultar("SELECT * FROM passwords", null);
  155.         if (c == null || c.getCount()==0)
  156.             psws=null;
  157.         else {
  158.             if (c.moveToFirst()) {
  159.                 int pos = 0;
  160.                 int limite = c.getCount();
  161.                 psws = new Password[limite];
  162.                 do {
  163.                     int id = c.getInt(0);
  164.                     String sitio = c.getString(1);
  165.                     String user = c.getString(2);
  166.                     String contra = c.getString(3);
  167.                     String preg = c.getString(4);
  168.                     String resp = c.getString(5);
  169.                     String corAlt = c.getString(6);
  170.                     psws[pos] = new Password(id, sitio, user, contra,
  171.                             preg, resp, corAlt);
  172.                     pos++;
  173.                 } while (c.moveToNext());
  174.             }else{
  175.                 psws=null;
  176.             }
  177.         }
  178.         c.close();
  179.         return (psws); 
  180.     }
  181.    
  182.     @SuppressWarnings("rawtypes")
  183.     class AdaptadorPasswords extends ArrayAdapter {
  184.  
  185.         Activity context;
  186.  
  187.         @SuppressWarnings("unchecked")
  188.         AdaptadorPasswords(Activity context) {
  189.             super(context, R.layout.lista, datos);
  190.             this.context = context;
  191.         }
  192.  
  193.         public View getView(final int position, View convertView,
  194.                 ViewGroup parent) {
  195.             View item = convertView;
  196.             final ViewHolder holder;
  197.  
  198.             if (item == null) {
  199.                 LayoutInflater inflater = context.getLayoutInflater();
  200.                 item = inflater.inflate(R.layout.lista, null);
  201.  
  202.                 holder = new ViewHolder();
  203.                 holder.titulo = (TextView) item.findViewById(R.id.Titulo);
  204.                 holder.subtitulo = (TextView) item.findViewById(R.id.Subtitulo);
  205.                 holder.activacion = (CheckBox) item
  206.                         .findViewById(R.id.activacion);
  207.  
  208.                 holder.activacion
  209.                         .setOnCheckedChangeListener(new OnCheckedChangeListener() {
  210.  
  211.                             @Override
  212.                             public void onCheckedChanged(
  213.                                     CompoundButton buttonView, boolean isChecked) {
  214.                                 // TODO Auto-generated method stub
  215.                                 if(isChecked)
  216.                                 {
  217.                                     posId++;
  218.                                 }
  219.                                 else
  220.                                 {
  221.                                     posId--;
  222.                                 }
  223.                                 Toast msj = Toast.makeText(Principal.this,
  224.                                         "el posId"+posId, Toast.LENGTH_SHORT);
  225.                                 msj.show();
  226.                             }
  227.                         });
  228.  
  229.                 item.setOnClickListener(new OnClickListener() {
  230.  
  231.                     @Override
  232.                     public void onClick(View v) {
  233.                         // TODO Auto-generated method stub
  234.                         Intent envio = new Intent(Principal.this, Contras.class);
  235.                         Bundle psw = new Bundle();
  236.                         psw.putInt("Id", datos[position].getId());
  237.                         envio.putExtras(psw);
  238.                         setResult(RESULT_OK, envio);
  239.                         startActivity(envio);
  240.                     }
  241.                 });
  242.  
  243.                 item.setOnLongClickListener(new OnLongClickListener() {
  244.  
  245.                     @Override
  246.                     public boolean onLongClick(View v) {
  247.                         // TODO Auto-generated method stub
  248.                         posicion = position;
  249.                         return false;
  250.                     }
  251.                 });
  252.  
  253.                 registerForContextMenu(item);
  254.  
  255.                 item.setTag(holder);
  256.             } else {
  257.                 holder = (ViewHolder) item.getTag();
  258.             }
  259.  
  260.             holder.titulo.setText(datos[position].getSitio());
  261.             holder.subtitulo.setText(datos[position].getUsuario());
  262.  
  263.             return (item);
  264.         }
  265.     }
  266.  
  267.     static class ViewHolder {
  268.         TextView titulo;
  269.         TextView subtitulo;
  270.         CheckBox activacion;
  271.     }
  272. }

Etiquetas: listview, personalizado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:32.