Beiträge von UweApps

    sorry, musste alles noch mal ändern, hatte was übersehen:


    du rufst moveToFirst auf - dann springt der spätere Aufruf moveToNext schon auf den zweiten Datensatz - und dir fehlt dann der erste.


    Im Anfang steht der Cursor nämlich _vor_ dem ersten Element (cursor.isBeforeFirst() == true bzw. cursor.moveToPosition(-1)) und moveToNext liest dann den ersten Eintrag.

    Dann musst du wohl oder übel das Seitenverhältnis selber ausrechnen mit myMainView.getHeight() und getWidth (ACHTUNG: die liefern int - unbedingt auf auf double casten) und dann dividieren: height/width.


    Wenn es größer 1.1 ist, dann ist es portrait, kleiner 0.9 landscape und ansonsten der noch nicht erfundene Android-Bierdeckel im quadratischen Format...

    Wenn du eine Query absetzt, bekommst du einen Cursor mit den Datensätzen zurück.


    Um die Daten zu speichern brauchst du eine dynamische Liste, denn dabei ist es egal, wieviele Einträge kommen, also z.B. eine ArrayList<String> (oder statt String eine eigene Klasse, die mehrere Spalten in einem Objekt speichert). Die Zeilenzahl bekommst du mit cursor.getCount() - aber wenn du nur die Daten auslesen willst, brauchst du das nicht.

    Java
    public ArrayList<String> getDatensaetze() {
    	Cursor cursor = getReadableDatabase().query( ...deine Abfrage...);
    	ArrayList<String> datensaetze = new ArrayList<Datensatz>();
    	while (cursor.moveToNext()) {
    		datensaetze.add(cursor.getString(0));
    	}
    	cursor.close();
    	return datensaetze;
    }

    Du benutzt eine TabActivity um die Daten anzuzeigen - da ist das Layout schon dabei und leider gibt es kein addFooterView - habs mal nachgeschaut.


    Wenn du die Doku zu TabActivity anschaust, findest du ein Beispiel zum Umbau auf eine Layout-XML-Datei. Dort könntest du dein Werbebanner unten im LinearLayout einbauen, das layout_weight="1" ist für ein FrameLayout schon eingebaut.

    Ich hab mir gerade mal den Output von der Seite angeschaut - die Umlaute kommen dort nicht als UTF-8 sondern als Zahlencodes - z.B. Köstlichkeiten.


    Damit gibt's leider Probleme, die Zeichen müssen entweder wirklich als UTF-8 codiert werden oder von dir in der App noch mal schnell auf UTF-8 zurückcodiert werden, bevor der Parse darüber stolpert...

    naja - der ViewFlipper macht so was vor allem zeitgesteuert, bei dir wäre der ViewSwitcher eventuell passender. Aber es gibt auch noch ImageSwitcher und TextSwitcher. ;)


    Ich wünsche dir viel Erfolg beim ausprobieren!!!

    Du kannst Elemente in einem Layout unsichtbar machen mit myTextView.setVisibility(View.GONE);


    Und wenn du sie dann anzeigen möchtest, myTextView.setVisibility(View.VISIBLE); setzen.


    Das geht mit eigentlich allen View-Elementen, z.B. LinearLayout etc.

    Schau doch erst mal den Developer's Guide an - mir hat das vollkommen gereicht um mich in Android einzuarbeiten. OK - ich hatte auch noch das Buzzword-Bingo-Beispiel aus der c't...


    In der Doku steht auch alles drin, um das Android-SDK unter Eclipse oder anderem zum Laufen zu bringen. Wenn du schon Eclipse benutzt, dann installiere dir besser eine weitere Version in einem eigenen Verzeichnis, dann kannst du es im Zweifelsfall schneller wieder deinstallieren - insgesamt kommen da nämlich gerne mal 1,5-2GB Speicherplatz zusammen.


    @killphil - da warst du schneller - und ausfühlicher. Aber meinen Tipp mit Speicherplatz wollte ich dann doch loswerden. :*

    Du könntest dir mal das Beispiel aus den API-Demos anschauen für die Liste mit Ausklappen (in der Vorlage die Tage).


    Der Ausklappteil ist bei dir dann wiederum ein ListView mit ListAdapter - in dem musst du dann gucken, welche Listeneinträge deiner Datenstruktur gerade aktuell sind und angezeigt werden sollen.


    Vielleicht fängst du erst mal mit einem ListView mit ListAdapter für die untere Ebene an - dann weißt du wenigstens, dass du die wichtigen Daten sehen kannst.
    Später kannst du dir dann den ExpandableListView für die Abschnitte aufbauen und dann ListViews in den Ausklappteil eintragen.

    Ich will dir jetzt nicht den Spaß am TableLayout vermiesen, aber ich hab mir den Code mal angeschaut und hab 'nen Gegen-Vorschlag:


    ListView mit einem netten ListAdapter, der dir jeweils ein LinearLayout (mit orientation=HORIZONTAL) für deine Listeneinträge bastelt.


    Diese Listeneinträge kannst du entweder wie hier per Hand zusammenbauen oder über einen Inflater aus einer XML-Layout-Datei holen lassen.


    Die Android-Doku hat Beispiele, welche direkt auf ListActivity aufsetzt - wenn du einen eigenen View hast, dann musst du statt "setListAdapter(new MyListAdapter(this));" folgendes eintragen:

    Java
    MyListAdapter myListAdapter = new MyListAdapter();
    myListView = (ListView) findViewById(R.id.containerListView);
    myListView.setAdapter(myListAdapter);
    maListView.setOnItemClickListener(myListAdapter);

    Ich habs mir mal nachgebaut und auch erst 'ne Weile gesucht - eigentlich ganz einfach, wenn man genau hinschaut (ich war auch blind). :-/


    NullPointerExeption bekommst du, weil zum Zeitpunkt von init() noch gar kein View geladen wurde - die findViewById bleiben leer.


    Du musst erst setContentView(R.layout.main); aufrufen (direkt nach super.onCreate(savedInstanceState);) und dann kannst du im init() die View-Elemente finden...

    Java
    public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.test);
    		init();
    	}

    sorry, da hatte ich mich etwas unklar ausgedrückt...


    onDestroy() passiert tatsächlich irgendwann viel später - nämlich wenn Android Speicherplatz braucht. Und das kann Stunden später sein. Und dann auch gerne für mehrere alte Instanzen auf einmal.


    Was aber auf jeden Fall vorher aufgerufen wird (wenn du die Methode implementierst), ist onPause()- und zwar genau dann, wenn die aktuelle Activity nicht mehr sichtbar ist und etwas anderes angezeigt wird.


    In onPause() solltest du den Code eintragen statt in onDestroy(). Entspechend solltest du den Service in onResume() aktivieren.


    Infos dazu findest du in der Android-Doku.


    Und ich schreibe das super.onDestroy() immer am Ende von onDestroy() - ich will erst selber was machen, bevor mir die Superklasse dazwischen fummelt.