Beiträge von ensacom

    Hier zeige ich Euch wie man mehrere Spalten einer Datenbank auslesen und
    diese in einem eigenen Layout ausgeben lassen kann.


    Für dieses Beispiel habe ich ein Layout mit zwei Spalten und zwei Zeilen gewählt.
    wobei sich in der ersten Spalte ein Symbol befindet, das je nach ausgelesenem Wert
    einer Spalte in der Datenbank ein anderes Symbol anzeigt.


    Hier ein erster Eindruck




    activity "fahrzeuge.java"

    Java
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }









    Hilfsfunktion die uns ein Datum im SQL-Format in ein Datum in deutscher Schreibweise umwandelt.

    Java
    private String Datum(String datum){
        	String result = null;
        	if(datum!=null){
        		result = "Zuletzt getankt am: " + datum.substring(8, 10)+"."+datum.substring(5, 7)+"."+datum.substring(0, 4);
        		}
        	else {
        		result="Noch nicht getankt";
        	}
        	return(result);
        }





    fahrzeuge.xml






    Hier noch eine Funktion mit der Sie die Datenbank und die für dieses Bsp. benötigten
    Datenbanktabellen anlegen können.


    Hallo, hier zeige ich Euch wie man einfach ein Datum umwandeln kann.
    Dies ist praktisch um ein Datum in deutscher Darstellung in einer Datenbank als date speichern zu können. umgekehrt können Sie auch das Datum aus der Datenbank auslesen und wieder in deutscher Schreibweise anzeigen lassen.



    Deutsches Datum in SQL-Datum umwandeln
    Nachdem diese Function mit Datum("30.05.2009"); aufgerufen wurde,
    wird das Datum in der Schreibweise 2009-05-30 ausgegeben.

    Java
    private String Datum(String datum){
      String result = null;
      if(datum!=null) {
        result = datum.substring(6, 10)+"-"+datum.substring(3, 5)+"-"+datum.substring(0, 2);
      }
      else {
        result="Es wurde kein Datum übergeben!";
      }
      return(result);
    }




    SQL-Datum in deutsches Datum umwandeln
    Nachdem diese Function mit Datum("2009-05-30"); aufgerufen wurde,
    wird das Datum in der Schreibweise 30.05.2009 ausgegeben.

    Java
    private String Datum(String datum){
      String result = null;
      if(datum!=null){
        result = datum.substring(8, 10)+"."+datum.substring(5, 7)+"."+datum.substring(0, 4);
      }
      else {
        result="Es wurde kein Datum übergeben!";
      }
      return(result);
    }

    In diesem Tutorial demonstriere ich den Umgang mit der SQLite Datenbank, insbesondere das Erstellen der Datenbank und der Datenbanktabellen wenn diese noch nicht vorhanden sind, das auslesen von Daten, das einfügen neuer und ändern schon vorhandener Daten.


    Als erstes legen wir einmal ein paar Variablen an um den Zugriff auf die Datenbank zu erleichtern.
    MY_DB_NAME enthält unseren Datenbanknamen und
    MY_DB_TABLE den Namen unserer Tabelle.
    Bei mehreren Tabellen müssen wir das entsprechend anpassen.


    Im onCreate unserer ersten activity rufen wir die Function "onCreateDBAndDBTabled" auf, die überprüft ob die Datenbank existiert.
    Sollte die Datenbank noch nicht existieren, wird diese angelegt,
    anschließend werden die benötigten Datenbanktabellen erzeugt.




    Neuen Datensatz einfügen


    Um nun einen neuen Datensatz in unserer Datenbanktabelle anzulegen,
    öffnen wir die Datenbank, schreiben unsere Daten in diese und schließen sie anschließend wieder.


    Die Daten die ich in die Datenbank einfügen will, kommen in diesem Beispiel aus verschiedenen Komponenten.
    Wir erinnern uns, wir haben folgende Spalten in unserer Datenbank.
    name, model, bemerkungen, kraftstoffart und tankinhalt.


    name, model, bemerkungen und tankinhalt sind vom Typ varchar.
    Diese Werte holen wir aus EditText-Komponenten.


    die Spalte kraftstoffart ist vom Typ integer. den Wert für die neue Kraftstoffart holen wir in diesem Bsp. aus einer Spinner-Komponente.





    Vorhandenen Datensatz updaten
    Natürlich wollen wir einen Datensatz später auch bearbeiten.
    Um nun einen bestimmten Datensatz bearbeiten zu können, müssen wir dessen ID übergeben um diese in der Datenbankabfrage verwenden zu können.


    Folgende Zeile fragt ab ob eine Variable mit dem Namen id an unsere activity übergeben wurde.


    Java
    if(getIntent().hasExtra("id") == true)


    Sollte die Variable übergeben worden sein, kann man diese für seine Abfrage verwenden.





    Bestimmte Spalten aus der Datenbank auslesen und in einer Liste ausgeben
    Nun wollen wir den Namen und das Model aller in der Datenbank vorhandenen Fahrzeuge in einer ListView ausgeben.




    Hier die xml-Datei für das Layout

    XML


    Wie sie eine Variable von einer activity an eine andere activity übergeben oder
    wie Sie die ID eines Datensatzes über den gewählten Eintrag in der ListView an ein ContextMenü übergben,
    um diese weiter zu verwenden, entnehmen Sie bitte den extra für diese Themen verfassten Tutorials.





    Auslesen von Daten in eine Spinner-Komponente (ComboBox)
    Hier noch ein kleines Beispiel wie Sie die Fahrzeugnamen aus der Datenbank
    in eine Spinner-Komponente auslesen können.



    Um diese Abfrage nutzen zu können, muss in der xml-Datei eine Spinner-Komponente
    mit der ID "cbFahrzeuge" vorhanden sein.



    Ich hoffe dass ich euch den Einstieg in den Umgang mit der SQLite-Datenbank
    durch mein Tutorial etwas erleichtern konnte.


    Sollten doch noch Fragen aufkommen, dann schickt mir einfach eine PM oder
    noch besser, stellt diese im Forum.

    Herzlich Willkommen in diesem Forum Marco.
    Es ist hier zwar noch nicht so viel los, aber es wird immer mehr.


    Ich denke Du bekommst hier viele hilfreiche Tipps.
    Ich selber bin gerade dabei fast täglich Tutorials zu veröffentlichen.


    Also wenn irgendwelche Fragen sind, dann immer her damit.
    Hier wird dir ganz sicher schnell geholfen.


    Bin zwar auch absoluter Anfänger, aber ich lerne jeden Tag eine Menge über Android und Java dazu.

    Hier zeuge ich euch folgendes
    - Daten aus einer SQLite-Datenbank in eine ListView laden.
    - ContextMenü erstellen und mit der ListView verbinden
    - ID aus Datenbank des selektierten Eintrages in der ListView an das Contextmenü übergeben.


    [size=large]fahrzeuge.java[/size]
    Daten aus der Datenbank in eine ListView laden.
    ContextMenü mit ListView verbinden.




    ContextMenü erstellen und den Cursor auf die AdapterView der ListView setzen um an die ID des selektierten Eintrages zu gelangen.




    Aktion beim anklicken eines Menüpunktes im Contextmenü



    [size=large]res/layout/fahrzeuge.xml[/size]




    [size=large]res/values/strings.xml[/size]




    [size=large]Hier ein paar Screenshots.[/size]
    Startbildschirm mit 3 gespeicherten Fahrzeugen


    [attachment=20]


    ContextMenü auf dem der Audi TT gewählt wurde und der ContextMenüPunkt Löschen angeklickt wird.


    [attachment=21]


    Startbildschirm nachdem der Audi TT gelöscht wurde.


    [attachment=22]



    Beim anklicken eines Menüpunktes im Contextmenü wird ein Eintrag in das LogFile erstellt der zeigt welcher Button angeklickt und wie die ID des in der ListView gewählten Eintrages war. Bei der ID handelt es sich nicht um die ID des ListVieweintrages selber sondern um die ID des Datensatzes des gewählten Eintrages aus der Datenbank.


    Über den Dalvik Debug Monitor können Sie die Ausgaben sehen.
    In diesem Beispiel habe ich als Ausgabe folgendes erhalten
    KFZ with id: 11 deletet

    Also ich habe es nun endlich hinbekommen meine ListView mit dem Contextmenü zu verbinden so dass ich auch die ID aus der DB über den gewählten Eintrag in der ListView meinem ContextMenü übergeben kann.


    [size=large]fahrzeuge.java[/size]
    Daten aus der Datenbank in eine ListView laden.
    ContextMenü mit ListView verbinden.




    ContextMenü erstellen und den Cursor auf die AdapterView der ListView setzen um an die ID des selektierten Eintrages zu gelangen.




    Aktion beim anklicken eines Menüpunktes im Contextmenü



    [size=large]fahrzeuge.xml[/size]





    [size=large]Hier ein paar Screenshots.[/size]
    Startbildschirm mit 3 gespeicherten Fahrzeugen


    [attachment=17]


    ContextMenü auf dem der Audi TT gewählt wurde und der ContextMenüPunkt Löschen angeklickt wird.


    [attachment=18]


    Startbildschirm nachdem der Audi TT gelöscht wurde.


    [attachment=19]

    Nun wo wir Eclipse, das SDK und alle Updates installiert und unser Handy erfolgreich eingerichtet haben, wollen wir ein erstes HelloWorld Projekt anlegen und es anschließend direkt auf unserem Handy ausführen.


    Dieses Tutorial behandelt das anlegen eines neuen Android-Projektes, sowie dessen Grundstruktur, das Zusammenspiel von activity und layout, sowie den ersten Start unserer Anwendung.


    Projekt anlegen
    Öffnen Sie Eclipse und klicken Sie im MainMenü auf „File->New->Project->Android->Android Project“.
    Bestätigen Sie Ihre Auswahl in dem Sie auf den Button „Next“ klicken.



    Es erscheint der „New Android Project-Dialog“ in dem wir nun folgende Einstellungen vornehmen.


    Projekteinstellungen


    Bestätigen Sie Ihre Angaben erneut durch einen Klick auf den Button „Finish“.


    Im Package Explorer erscheint nun unser neu erstelltes Projekt unter dem Namen TankPro.


    Erklärung der einzelnen Ordner im Projektverzechnis
    In unserem Projektverzeichnis sehen wir einige Ordner die alle eine bestimmte Funktion haben.


    src
    Der Ordner „src“ enthält alle Java-Files (Class), Die Class TankPro.java ist in
    diesem Fall unserer erste Activity, die geladen wird sobald Sie das Programm starten.


    gen
    Der Ordner „gen“ braucht uns erst einmal nicht zu interessieren.
    Da die Daten die in diese Ordner liegen automatisch generiert werden.
    In der Datei R.java z.B. werden automatisch zu jedem Bezeichner eindeutige Ids vergeben auf die wir dann über unser Programm zugreifen können.


    Android 1.5
    Im Ordner „Android 1.5“ sind alle Klassen von Android und Java enthalten die wir für
    unser Programm nutzen können und die später in unseren activitys durch die Angabe von „import“ gelinkt werden.


    res
    Der Ordner „res“ enthält mehrere Unterordner die alle einen bestimmten Zweck erfüllen.


    drawable
    Alle Bilder Symbole etc. die im Programm verwendet werden sollen kommen hier rein.


    layout
    In den meisten Fällen hat man zu einer activity eine Layoutdatei im XML-Format.
    Diese xml-Dateien kommen in den Ordner layout


    values
    Im Ordner „values“ liegt standardmäßig die Datei strings.xml. In der alle im Programm vorkommenden Zeichenketten stehen sollten.


    AndroidManifest.xml
    In der „AndroidManifest.xml“ werden alle Activitys auf die unser Programm Zugriff haben soll, angegeben. Außerdem müssen hier alle Rechte verwaltet werden (Permissions)
    Wollen Sie z.B. über Ihr Programm eine SMS versenden müssen Sie die permission android.permission.SEND_SMS angegen.
    Alle möglichen permissions finden Sie unter http://developer.android.com/r…/Manifest.permission.html.
    Im Moment gibt es mehr als 90 permissions.


    Starten unserer ersten Anwendung
    Öffnen Sie den Ordner „src“ und anschließend unseren packagenamen „com.ensacom.android.tankpro“ und öffnen Sie die Datei tankpro.java.


    Wir sehen in dieser activity den Eintrag „setContentView(R.layout.main);“
    Dieser Eintrag bedeutet, das unser Layout aus der Datei „res/layout/main.xml“ geladen wird.
    Schauen wir uns also einmal diese Datei an.
    Sie besteht aus einem LinearLayout und einem Textview.


    Im TextView gibt es die Zeile „android:text=“@string/hello“.
    @string/hello bedeutet nichts anderes, als dass der Text der in unserem TextView stehen soll aus der Datei „res/values/strings.xml“ geladen werden soll.


    Wir öffnen also die Datei „res/values/strings.xml“ und suchen nach dem Eintrag „hello“.
    Dort steht Hello World, tankpro!. Dieser Text wird also in unserem TextView angezeigt sobald wir das Programm starten.




    Programm starten
    Gehen Sie also wieder auf die Datei „tankpro.java“ und drücken Sie entweder die Tastenkombination Strg+F11
    oder wählen Sie im MeinMenü Run->Run oder klicken Sie auf das grüne Symbol mit dem weißen Pfeil.


    Es erscheint ein Dialog in dem Sie gefragt werden als was Sie die Application starten möchten.
    Wählen Sie "Android Application" und klicken Sie auf „OK“


    Nach ein paar Sekunden erscheint auf unserem Handy der Titel TankPro und auf
    einem schwarzen Hintergrund der Schriftzug „Hello World tankpro!


    Das war es auch schon mit unserem ersten Tutorial.
    Ich hoffe es hat Ihnen gefallen und den Einstieg in Eclipse und Android etwas erleichtert.

    Eines der coolsten Dinge in Android sind Intents.
    Am häufigsten werden Intents dazu benutzt um Anwendungen zu starten oder Aktivitäten wie das Öffnen des eMail-Programms, oder der Kontaktliste zu starten.


    Ein Intent beschreibt was eine Applikation tun möchte, wobei ein Intent aus einer Action und den Daten, mit denen diese Action ausgeführt werden soll, besteht.
    Z.B. ruft man eine Webseite über einen Intent auf, indem man ihr die Action "View" zuweist und ihr zusätzlich die Url der aufzurufenden Seite übergibt.


    Intents können z.B. auch gut dazu benutzt werden um einen Barcode zu scannen und den gescannten code an die activity zurückzugeben. Oder man schießt mit der Kamera ein Bild und verschickt dieses per eMail.


    Hier noch ein paar Beispiele, was Sie mit "android.intent.action.VIEW" und "startActivity ()" tun können.


    Einen Barcode scannen und den code zurückgeben

    Java
    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
    startActivityForResult(intent, 0);



    Java
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (resultCode == Activity.RESULT_OK && requestCode == 0) {
        Bundle extras = data.getExtras();
        String result = extras.getString("SCAN_RESULT");
        Toast toast = Toast.makeText(this, result, Toast.LENGTH_SHORT);
        toast.show();
      }
    }




    Ein Foto schießen

    Java
    Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
    startActivityForResult(intent, 0);



    Java
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
      if (resultCode == Activity.RESULT_OK && requestCode == 0) {
        String result = data.toURI();
        Toast toast = Toast.makeText(this, result, Toast.LENGTH_SHORT);
        toast.show();
      }
    }

    Um eine SMS im Hintergrund zu versenden ohne das SMS-Programm zu öffnen, gehen Sie wie folgt vor.


    Setzen Sie die Rechte zum versenden von SMS in der Datei AndroidManifest.xml.

    Java
    <uses-permission android:name="android.permission.SEND_SMS"></uses-permission>



    SMS versenden

    Java
    SmsManager m = SmsManager.getDefault();
    String destination = "+49123456789";
    String text = "Hallo, Max\n\nWie geht es dir?";
    m.sendTextMessage(destination, null, text, null, null);

    Hier zeige ich euch wie man das Handy zum vibrieren bringen kann.


    Wie so oft müssen wir erst mal in der AndroidManifest.xml die Rechte dazu setzen.
    Dazu schreben wir einfach die folgende Zeile vor das schließende tag </manifest>


    Java
    <uses-permission android:name="android.permission.VIBRATE"></uses-permission>



    Das Handy vibriert 1000 Millisekunden

    Java
    Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    long milliseconds = 1000;  
    v.vibrate(milliseconds);

    Manchmal ist es nicht wünschenswert das sich die Bildschirmanzeige ändert sobald man das Handy dreht.


    Hier nun ein kleines Beispiel wie Sie eine bestimmte Bildschirmanzeige erzwingen können. Haben Sie einen der Befehle aufgerufen, wird sich der Anzeigemodus beim drehen des Handys nicht mehr ändern. Am besten schreibt man diese eine Zeile ins onCreate der activity.



    Portrait-Ansicht erzwingen

    Java
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);




    Landschaftsmodus erzwingen

    Java
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

    Gefunden bei: http://www.anddev.org


    Okay.. lets start with the main app which calls the login screen..


    The Main activity basically starts the Login activity and waits for the result.
    If the Login activity returns and the login was correct startup() is called and
    the textview shows which user logged in.


    Main Activity





    Now the Login Activity..


    Login Activity




    here is the main layout..


    main.xml




    the manifest file...


    AndroidManifest.xml




    and last but not least the php script on the server....


    login.php




    the MySQL dump




    Zugangsdaten zum testen
    username: test
    passwort: test

    Gefunden bei: http://www.anddev.org


    Here on request a simple Login that uses your Google Account


    Main.java





    Login.java





    GoogleLogin.xml






    AndroidManifest.xml





    No mysql db or php script needed.. just use your google account login.
    I hope i understand the request correct and this is the right solution Smile


    I should mention that this is not a rock stable login method.. if google
    change their login site this no longer works.


    And by the way.. in case you wonder.. google sends wrong content-length thats
    the reason for this hack like method instead of a clean check etc.

    Inhalt des Tutorials ist das Erstellen einer SQLite-Datenbank, das Anlegen von Tabellen, sowie das Einfügen, Ändern und Auslesen von Daten aus einer Datenbank-Tabelle.


    Dieses Tutorial wird etwas aufwendiger und besteht aus 3 activitys, nämlich der main-activity, der activity "fahrzeuge" auf der die gespeicherten Fahrzeuge in einer Liste ausgegeben werden und der activity "Fahrzeug_New" wo man ein neues Fahrzeug anlegen oder ein in der vorherigen activity selektiertes Fahrzeug bearbeiten kann.


    Alle Dateien die in diesem Tutorial angesprochen werden finden Sie im Anhang.


    Wie man ein Android-Projekt erstellt werde ich hier nicht erläutern da dies jedem klar sein sollte.


    Wir definieren also in der main-activity erst ein mal ein paar Variablen die wir im Programm öfter benutzen werden.


    MyDB bietet Methoden Verwalten einer SQLite-Datenbank. Dazu gehören das Erstellen und Löschen von Datenbanken und Tabellen, sowie das Ausführen von SQLAnweisungen.
    MY_DB_NAME ist der Name der Datenbank.
    MY_DB_TABLE ist die Tabelle die wir erzeugen wollen
    MENU_FAHRZEUGE repräsentiert die ID für unseren einzigen Menüpunkt über den wir zur nächsten activity gelangen.



    [size=large]Activity TankPro2[/size]

    Java
    public class TankPro2 extends Activity {		
    	SQLiteDatabase myDB = null; 
    	final static String MY_DB_NAME = "TankPro2";
    	final static String MY_DB_TABLE = "fahrzeuge";
    
    
    	static final int MENU_FAHRZEUGE = 1;






    Wir wollen, dass beim starten der Anwendung eine Verbindung zu unserer Datenbank aufgebaut wird. Dazu wird als erstes geprüft ob die Datenbank und die benötigten Tabellen überhaupt existieren. Sollte die Datenbank vorhanden sein, wird eine Verbindung zu dieser hergestellt. anderenfalls wird die Datenbank erzeugt und anschließend zu dieser verbunden. Das gleich geschieht mit unseren Datenbanktabellen. Sollte eine Tabelle nicht existieren, wird diese angelegt.


    Java
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        onCreateDBAndDBTabled(); //DB und Tables erstellen wenn noch nicht vorhanden
        setContentView(R.layout.main);
    }






    Hier nun die Funktion zum erstellen der Datenbank und der Datenbanktabellen.



    Genauso können wir direkt in dieser Funktion SQL-Befehle zum löschen einer Tabelle oder zum einfügen von Daten in eine Tabelle angeben.



    Nun erstellen wir noch einen Menüpunkt über den wir zur nächsten
    activity „fahrzeuge“ gelangen. Dieser Menüpunkt wird nach anklicken
    des Menübuttons auf unserem Handy angezeigt.




    Nun müssen wir unseren Menüpunkt noch mit einer Aktion versehen.
    Es wird geprüft ob der Menüpunkt „MENU_FAHRZEUGE“ angeklickt wurde, anschließend wird die activity „fahrzeuge“ geladen und angezeigt.


    Java
    public boolean onOptionsItemSelected(MenuItem item){
      switch (item.getItemId()) {
      case MENU_FAHRZEUGE:
        Intent iFahrzeuge = new Intent(this, fahrzeuge.class);
        startActivity(iFahrzeuge);
        return true;
      }
      return false;
    }




    [size=large]Activity fahrzeuge[/size]


    Nun befinden wir uns auf der activity „fahrzeuge“ wo wir den Namen und das Model aller in der Datenbank gespeicherten Fahrzeuge in einer Liste ausgeben lassen.
    Außerdem wird es wieder einen Menüpunkt geben über den wir ein neues Fahrzeug anlegen können. Um die Daten eines Fahrzeuges zu bearbeiten klickt man in der Liste einfach auf den entsprechenden Eintrag, worauf die activity „Fahrzeug_New“ wie auch beim anklicken des Menüpunktes „Neues Fahrzeug“ gestartet und angezeigt wird nur das in diesem Fall die ID des Fahrzeuges mit übergeben wird.




    Wir connecten zu unserer Datenbank und lesen anschließend die _id, den Namen und das Model aller Fahrzeuge aus. Die Daten werden im SimpleCursorAdapter hinterlegt den wir anschließend mit unserer Liste verbinden.







    Nun legen wir die Funktion „onListItemClick“ an die aufgerufen wird wenn wir einen Eintrag in der Liste anklicken.
    Es wird die activity „Fahrzeug_New“ gestartet und ihr die _id des angeklickten Eintrages übergeben.
    Das übergeben einer Variable an eine weitere activity geschieht über putExtra. PutExtra übergibt man den Namen der Variable und den zu übergebenden Wert.


    Java
    @Override
    	protected void onListItemClick(ListView l, View v, int position, long id) {
    		super.onListItemClick(l, v, position, id);
    		
    		Intent i = new Intent(this, Fahrzeug_New.class);
    		i.putExtra("id", id);
            this.startActivity(i);
    	}






    Jetzt erstellen wir wie in der vorhergehenden activity wieder ein Optionsmenü und hauchen ihm mit „onOptionsItemSelected“ Leben ein.


    Java
    public boolean onCreateOptionsMenu(Menu menu) {
            super.onCreateOptionsMenu(menu);
    		menu.add(0, MENU_NEW_KFZ, 0, R.string.menuNewKFZ)
            .setShortcut('1', 'n')
            .setIcon(android.R.drawable.ic_menu_add);
            return true;
        }


    Java
    public boolean onOptionsItemSelected(MenuItem item){
        	switch (item.getItemId()) {
            case MENU_NEW_KFZ:        	
            	Intent iFahrzeug_new = new Intent(this, Fahrzeug_New.class);
                startActivity(iFahrzeug_new);
            	return true;	
            }
            return false;
        }




    [size=large]Activity Fahrzeug_New[/size]


    Diese activity ist etwas aufwendiger da wir mit ihr ein neues Fahrzeug anlegen oder aber ein zuvor auf der activity „fahrzeuge“ selektiertes Fahrzeug bearbeiten können.



    Diese activity wird von der activity „fahrzeuge“ aufgerufen sobald man ein Fahrzeug aus der Liste auswählt oder man auf den Menüppunkt „Neues Fahrzeug“ klickt.


    Wir haben uns gemerkt, das beim anklicken eines Fahrzeuges in der Liste, die _id des gewählten Fahrzeuges übergeben wird. Dies passiert nicht wenn man auf den Menüpunkt „Neues Fahrzeug“ klickt.


    Also müssen wir als erstes überprüfen ob eine _id übergeben wurde um entscheiden zu können ob ein neues Fahrzeug angelegt oder die Daten des gewählten Fahrzeuges aus der Datenbank geladen werden sollen.


    Diese Abfrage benötigen wir ein zweites mal bei der Frage ob die Daten neu in die Datenbank eingefügt (Neues Fahrzeug) oder geändert (Fahrzeug wurde in der Liste ausgewählt) werden sollen.




    Wir erstellen das Menü und fragen erneut ab ob eine _id übergeben wurde oder nicht.
    Wurde eine _id übergeben, steht auf unserem Button "Update" ansonsten "Speichern"





    Hier zeige ich euch wie man Date aus einer MySQL-Datenbanktabelle in eine Spinner lädt. Die Spinner befindet sich dabei in der layoutdatei settings.xml.


    Hier die activity settings



    settings.xml



    strings.xml

    Code
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
    
    <!-- Strings -->   
        <string name="KFZAuswahl">Wählen Sie ein Fahrzeug...</string>
        <string name="KFZAuswahlHinweis">Bitte wählen Sie das Fahrzeug das Sie tanken wollen!</string>
    
    
    </resources>



    Der Vollständigkeit halber hier noch die Funktion zum erstellen der Datenbank und der Datenbanktabellen. Es müssen nur noch Werte in die Datenbank eingetragen werden damit man diese dann in der Spinner anzeigen lassen kann.


    Hallo, ich habe eine Liste mit Einträgen aus einer Datenbank.
    Wenn ich auf einen EIntrag klicke wird die ID des Eintrages aus der Datenbank an eine andere activity übergeben.


    Nun habe ich der Liste ein ContextMenü zugewiesen über das ich den gewählten Eintrag schnell löschen will.


    Wie kann ich nun erreichen, dass ich über das ContextMenü auf die id des gewählten Eintrages gelange?


    onListItemClick bietet mir ja direkt die Variable id, bei onContextItemSelected gibt es das natürlich nicht.


    Wie komme ich also über das ContextMenü an die id des gewählten Eintrages der Liste?


    Danke

    Hier nun noch ein kleines Beispiel wie man ein ContextMenü erstellt.
    Für alle die es nicht wissen, das ContextMenü ist ein Menü was erscheint, wenn man länger auf ein Control wie eine ListView oder ein EditText klickt.


    In meinem Beispiel verbinde ich das ContxtMenü mit einer getListView.



    getListView mit ContextMenü verbinden

    Java
    public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            .........
            registerForContextMenu(getListView());
    }




    ContextMenü erstellen und das Verhalten beim anklicken eines Eintrages zuweisen


    Hier gilt das selbe wie im vorherigen Tutorial.
    Man kann statt

    Java
    menu.add(0, EDIT_ID, 0, "Edit");
    menu.add(0, DELETE_ID, 0,  "Delete")


    auch folgendes schreiben wenn man die Bezeichner in der Datei /res/values/strings.xml hinterlegt hat.


    Java
    menu.add(0, EDIT_ID, 0, R.string.cmEdit);
    menu.add(0, DELETE_ID, 0,  R.string.cmDelete);


    /res/values/strings.xml

    Java
    <!-- ContextMenüs -->    
        <string name="cmEdit">Bearbeiten</string>
        <string name="cmDelete">Löschen</string>

    Hier zeige ich euch, wie man eine Variable, z.B. die ID eines Datenbankeintrages, an eine zweite activity weitergeben kann.



    activity von der aus die Variable id übergeben werden soll.
    Die Variable id wird in unserem Bsp. an die activity settings übergeben.

    Java
    long id = 1234;
    
    
    Intent iActivity2 = new Intent(this, settings.class);
    iActivity2.putExtra("id", id);
    startActivity(iActivity2);




    activity settings, die die gesendete Variable entgegennimmt


    Wenn alles richtig ist, sollte nun die Activity settings gestartet und der Wert 1234 ausgegeben werden.


    Ganz wichtig. der Typ der zu übergebenden Variable muss in beiden activitys gleich sein da sonst nichts angezeigt wird. In diesem Beispiel handelt es sich bei der Variable id um den Typ long.

    Hier zeige ich euch wie man ein Menü mit Symbolen erstellen kann.
    in der Datei res/values/strings.xml müssen für das Menü folgende Einträge vorhanden sein. Diese legen die Bezeichnung der einzelnen Menüpunkte fest.
    Man kann die Bezeichnungen zwar auch direkt in der activity angeben, nur wozu hat man die Möglichkeit Texte in eine xml-Datei auszulagern wenn man Sie nicht nutzt.


    res/values/strings.xml

    Java
    <string name="menuBeenden">Beenden</string>
    <string name="menuFahrzeuge">Fahrzeuge</string>
    <string name="menuTanken">Tanken</string>




    activity



    Für die Symbole ist folgendes zu beachten.

    Java
    .setIcon(android.R.drawable.ic_menu_close_clear_cancel);


    besagt, dass das Icon ic_menu_close_clear_cancel nicht aus dem Ordner /res/drawable des Objektes sondern aus dem gleichnamigen Ordner des OS kommt.


    Java
    .setIcon(R.drawable.menu_tanken);


    hingegen besagt dass das Icon menu_tanken im Ordner /res/drawable liegt und von dort geladen wird. In meinem Fall handelt es sich um png-files.


    Ich hoffe dieses Tutorial ist hilfreich für den einen oder anderen.

    Ich habe das Problem nun selber gefunden.


    Hier mein source