Autore Topic: Cancellare un item della listview popolata da database  (Letto 673 volte)

Offline Miralo

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Google+
    • miralo666
    • Miralo89
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Next GT-S5570
  • Sistema operativo:
    Windows 7 Home Premium
Cancellare un item della listview popolata da database
« il: 15 Aprile 2012, 12:35:19 CEST »
0
Salve a tutti, ho un problema con una list view che ho popolato da DB, dove ho applicato un contextMenu col quale dovrei cancellare sia da SQL che da "Layout" un elemento della mia lista. 
La mia domanda è: è possibile, nel momento in cui eseguo l' onLongClick per visualizzare il menu contestale, di ottenere il testo scritto nell'item selezionato?

Ecco i frammenti di codice coinvolti:

Activity Principale
Codice: [Seleziona]
ListView listgm=(ListView)findViewById(R.id.listgm);
       
        MyDatabase db=new MyDatabase(getApplicationContext());
        db.open();  //apriamo il db
       
        Cursor c=db.fetchGm(); // query
        startManagingCursor(c);

        //Riempio la lista
        SimpleCursorAdapter adapter=new SimpleCursorAdapter( //semplice adapter per i cursor
                        this,
                        R.layout.product, //il layout di ogni riga/prodotto
                        c,
                        new String[]{MyDatabase.GmMetaData.TITOLO,MyDatabase.GmMetaData.ID},//questi colonne
                        new int[]{R.id.Titolo,R.id.Id});//in queste views
       
       
        listgm.setAdapter(adapter); //la listview ha questo adapter
       
        registerForContextMenu(listgm);

Qui creo il ContextMenu e gestisco i suoi item:
Codice: [Seleziona]
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
            if (v.getId()==R.id.listgm) {
              AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
              menu.setHeaderTitle("Operazioni");
              menu.add(Menu.NONE, 1, 1, "Cancella");
             
            }
          }

public boolean onContextItemSelected(MenuItem item) {
       
            MyDatabase db=new MyDatabase(getApplicationContext());
        db.open();  //apriamo il db
       
       
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
        switch(item.getItemId()){
        case 1:
                //do sth related to the button clicked
               
                //id al momento non è istanziato poichè non so come ottenere l'id corrispondente del DB dell'item selezionato della listview
                db.deleteGm(id);
           
            break;

        }
        db.close();
        return super.onContextItemSelected(item);
    }

Nella classe del DB, la funzione per cancellare l'elemento è:
Codice: [Seleziona]
public void deleteGm(int id){ //metodo per inserire i dati
       
        mDb.delete(GmMetaData.TABLE, GmMetaData.ID+"="+id, null);
    }

Mentre nell'xml del layout la lista è popolata in questo modo:
Codice: [Seleziona]
<TextView               
                android:id="@+id/Id"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="8"
                android:textSize="20dp"
                android:textStyle="bold"
                android:textColor="#000000"
                android:longClickable="true"
                android:layout_marginRight="10dp"
                >
        </TextView>
        <TextView               
                android:id="@+id/Titolo"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="8"
                android:textSize="20dp"
                android:textStyle="bold"
                android:textColor="#000000"
                android:longClickable="true"
                >
        </TextView>