KIO
Kreative Ideen online

Cursor behalten nicht automatisch bei, ob sich die zugrunde liegenden Daten in der Dabase geändert haben. Wenn also die zugrunde liegenden Daten nach der Erstellung des Cursors geklingelt werden, wird der Cursor nicht aktualisiert: Er wird immer noch die ursprünglichen Datensätze und keines der Chages aktualisiert.

Excample:

Wenn Sie über eine Aktivität verfügen, die Daten anzeigt (eine Liste mit Favoriten), und Sie eine andere Aktivität aufrufen und Änderungen (Hinzufügen oder Entfernen eines Favoritenelements) haben, wird die Listenansicht bei Verwendung der Backbutton zur ersten Aktivität nicht das neue Getränk enthalten.

Cursor werden nicht automatisch aktualisiert

Dies liegt daran, dass Cursor Daten abrufen, wenn der Cursor erstellt wird.
Beispiel :

    geschützte void onCreate(Bundle savedInstanceState)
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_top_level);
         ListView listFavorites = (ListView)findViewById(R.id.list_favorites);

        Versuch {
            SQLiteOpenHelper starbuzzDatabaseHelper = neuer StarbuzzDatabaseHelper(this);
            db = starbuzzDatabaseHelper.getReadableDatabase();
            favoritesCursor = db.query("DRINK",new String[]'_id","NAME"',"FAVORITE = 1", null,null,null,null);
            CursorAdapter favoriteAdapter = neue SimpleCursorAdapter(TopLevelActivity.this,android. R.layout.simple_list_item_1,favoritesCursor,new String[]'"NAME"',new int[]'android. R.id.text1,0);
            Festlegen des Curser-Adapters auf die Listenansicht
            listFavorites.setAdapter(favoriteAdapter);
        • catch (SQLiteException e)
            Toast toast = Toast.makeText(this,"Database unavailable",Toast.LENGTH_SHORT);
            toast.show();
        }
   }

So erhält es seine Daten, wenn die Aktivität erstellt wird. Wenn Sie durch die anderen Aktivitäten navigieren, wird TopLevelAvtivity angehalten. Es ist nicht zerstört und neu erstellt, so neiither ist der Cursor.

Lösung: Cursor in onRestart() ändern

  • Definieren des Cursors
  • Abrufen eines Verweises auf den Cursoradapter
  • Ändern des Cursors mit chageCursor()
    @Override
    öffentliche void onRestart()"
        super.onRestart();
        Cursor newCursor = db.query("DRINK",new String[]'_id","NAME"',"FAVORITE = 1",null,null,null,null);
        ListView listFavorites = (ListView)findViewById(R.id.list_favorites);
        CursorAdapter Adapter = (CursorAdapter)listFavorites.getAdapter();
        Wechseln des Cursors, der von der Listenansicht list_favorites verwendet wird, zum neuen Cursor
        adapter.changeCursor(newCursor);
        /*Ändern Sie den Wert von favoritenCursor in den neuen Cursor so
        wir können es in der onDestroy()-Methode der Aktivität ändern
         */
        favoritesCursor = newCursor;
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert