Foros del Web » Programando para Internet » Android »

Problemas con las bases de datos y las activities

Estas en el tema de Problemas con las bases de datos y las activities en el foro de Android en Foros del Web. Buenas. He aqui mi pesar Tengo el siguiente código Cita: public class ListAnotaciones extends ListActivity { AnotacionesOpenHelper openHelper = AnotacionesOpenHelper.getAnotaciones(this); SQLiteDatabase bd; Cursor cursor; @Override ...
  #1 (permalink)  
Antiguo 27/05/2015, 10:23
Avatar de jessicamcav13  
Fecha de Ingreso: septiembre-2014
Mensajes: 29
Antigüedad: 9 años, 6 meses
Puntos: 0
Pregunta Problemas con las bases de datos y las activities

Buenas.
He aqui mi pesar
Tengo el siguiente código
Cita:
public class ListAnotaciones extends ListActivity {

AnotacionesOpenHelper openHelper = AnotacionesOpenHelper.getAnotaciones(this);
SQLiteDatabase bd;
Cursor cursor;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bd = openHelper.getReadableDatabase();
cursor = bd.rawQuery("select * from anotaciones", null);
final ArrayList<Cursor> lista = new ArrayList<Cursor>();

try {
String [] from = {"titulo", "fecha"};
int [] to = {R.id.anotacionesTexto, R.id.anotacionesFecha};
final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.anotacion, cursor, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
setListAdapter(adapter);

getListView().setChoiceMode(ListView.CHOICE_MODE_M ULTIPLE_MODAL);
getListView().setMultiChoiceModeListener(
new AbsListView.MultiChoiceModeListener() {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
int seleccion = getListView().getCheckedItemCount();
boolean borrado = false;

if(checked){
lista.add((Cursor)getListView().getItemAtPosition( position));
lista.get(0).moveToFirst();
Toast.makeText(getApplicationContext(),lista.get(0 ).getString(0),Toast.LENGTH_SHORT).show();
}else{
/*
SQLiteCursor seleccionado = (SQLiteCursor)getListView().getItemAtPosition(posi tion);
for(int i = 0;i < lista.size();i++){
if(lista.get(i).getString(0).equals(seleccionado.g etString(0))){
lista.remove(i);
borrado = true;
break;
}
}
*/
}
mode.setTitle(seleccion + " Notas Seleccionadas");
}

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.ctx_borrar,m enu); //Inflamos el menú creado como XML en Menu
return true;
}

@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()){
case R.id.CtxLblBorrar:
/*
for(int i = 0 ; i < lista.size();i++){
Toast.makeText(getApplicationContext(),lista.get(i ).getString(0),Toast.LENGTH_SHORT).show();
bd.delete("anotaciones","_id = " + lista.get(i).getString(0),null);
}
*/
while(lista.get(0).moveToNext()){
bd.delete("anotaciones","_id = " + lista.get(0).getString(0),null);
}
adapter.notifyDataSetChanged();
return true;
default:
return false;
}

}

@Override
public void onDestroyActionMode(ActionMode mode) {

}
}
);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}

/*@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.anotaciones, menu);

return true;
}*/

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.CtxLblBorrar:
Toast.makeText(getApplicationContext(),"Se ha pulsado Borrar - " + getListView().getCheckedItemCount(),Toast.LENGTH_S HORT).show();
return true;
default:
Toast.makeText(getApplicationContext(),"OPCION NO PROGRAMADA",Toast.LENGTH_SHORT).show();
return super.onOptionsItemSelected(item);
}
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.ctx_borrar, menu);
}
}
El problema es el siguiente:
Muestro el contenido de la base de datos en un listView, y la idea es poder seleccionar diferentes elementos de esta y borrarlos. El problema radica en el no saber como decirle al método Delete que borrar. Básicamente no se como recuperar información de la listview.
Caso a parte, tampoco me funciona el método que en teoría actualizaría la ListView.
Lo mas seguro es que sea un problema sencillo, pero soy algo nueva en esto del Android.
Gracias por adelantado.
  #2 (permalink)  
Antiguo 30/05/2015, 05:22
Avatar de jessicamcav13  
Fecha de Ingreso: septiembre-2014
Mensajes: 29
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problemas con las bases de datos y las activities

¿Nadie sabe? Me parece que es algo básico de Android, pero yo no logro saber como hacerlo.
  #3 (permalink)  
Antiguo 30/05/2015, 15:33
Avatar de jc_moj  
Fecha de Ingreso: septiembre-2009
Ubicación: Andalucía
Mensajes: 137
Antigüedad: 14 años, 7 meses
Puntos: 12
Respuesta: Problemas con las bases de datos y las activities

Hola

Dale un vistazo aquí a ver:

http://www.sgoliver.net/blog/interfa...-seleccion-ii/
  #4 (permalink)  
Antiguo 02/06/2015, 14:33
Avatar de jessicamcav13  
Fecha de Ingreso: septiembre-2014
Mensajes: 29
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: Problemas con las bases de datos y las activities

Simplemente estaba liada ( y di por hecho cosas obvias que realmente no funcionaban como creía, véase la ID del onItemCheckedState).

Por si alguien quiere mi solución, ha sido esta:
Cita:
public class ListAnotaciones extends ListActivity {

AnotacionesOpenHelper openHelper = AnotacionesOpenHelper.getAnotaciones(this);
SQLiteDatabase bd;
Cursor cursor;
Context contexto = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bd = openHelper.getWritableDatabase();
cursor = bd.rawQuery("select * from anotaciones", null);
final ArrayList<Long> borrar = new ArrayList<Long>();
try {
String [] from = {"titulo", "fecha", "texto"};
int [] to = {R.id.anotacionesTitulo, R.id.anotacionesFecha,R.id.anotacionesTexto};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.anotacion, cursor, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
setListAdapter(adapter);
getListView().setChoiceMode(ListView.CHOICE_MODE_M ULTIPLE_MODAL);
getListView().setMultiChoiceModeListener(
new AbsListView.MultiChoiceModeListener(){
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
Toast.makeText(getApplicationContext(),Long.toStri ng(id),Toast.LENGTH_SHORT).show();
if(checked){
borrar.add(id);
}else{
for(int i = 0; i < borrar.size();i++){
if(borrar.get(i) == id){
borrar.remove(i);
}
}
Toast.makeText(getApplicationContext(),"Deseleccio nado",Toast.LENGTH_SHORT).show();
}
}

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.ctx_borrar,m enu); //Inflamos el menú creado como XML en Menu
return true;
}

@Override
public void onDestroyActionMode(ActionMode mode) {

}

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()){
case R.id.CtxLblBorrar:
Toast.makeText(getApplicationContext(),"Se ha pulsado Borrar",Toast.LENGTH_SHORT).show();
for(int i = 0 ; i < borrar.size();i++){
bd.delete("anotaciones","_id=" + borrar.get(i),null);
}
return true;
default:
return false;
}
}

@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
}
);

} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.anotaciones, menu);
return true;
}



}
Un saludo y gracias por todo.

Etiquetas: bases, bd, listview, sql
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 03:18.