Problem mit ScrollView nach Wechel der Orientierung

  • Hallo, Eure Seite hat mir schon öfter mal geholfen, da ich totaler Anfänger mit Java und Android bin. Dafür schon mal danke!
    Nun habe ich jedoch ein paar Probleme, die ich so nicht lösen konnte, deshalb habe ich mich als erstes im Neuen Jahr bei Euch angemeldet.
    Problem 1 ist: Ich habe eine Einstellungs-Activity, die nur aus 2 Button und einem ScrollView besteht. Das ScrollView ist etwa 3 x so hoch wie das Display in senkrechter Ausrichtung. Bei einem Wechsel der Ausrichtung des Gerätes möchte ich es nun erreichen, dass wieder der gleiche Teil des ScrollViews zu sehen ist.
    Ich speichere bei einem Ausrichtungswechsel über outState.putInt() die Werte von das_scrollview.getScrollX() und das_scrollview.getScrollY() und setze sie dann nach dem Einlesen im if (savedInstanceState != null) wieder über das_scrollview.scrollBy(x,y), auch das_scrollview.scrollTo(x,y)
    Nur leider reagiert das ScrollView überhaupt nicht. Es steht dann immer ganz oben, welchen Fehler machte ich??
    Problem 2:
    Ich habe mehrere Spinner in dieser Einstellungs-Activity und kann auch über deren setOnItemSelectedListener() die entsprechende Auswahl setzen und feststellen, aber, wie kann ich mitbekommen, ob der Auswahldialog geöffnet ist, oder ob der Spinner geschlossen ist, den setOnClickListener() funktioniert ja da nicht. Denn auch hier möchte ich bei Orientierungsänderung den "alten" Zustand wieder herstellen können. Falls ich das falsche Objekt gewählt habe, so müsste ich halt statt der Spinner Button nutzen und dann entsprechende Dialoge anzeigen.
    Ich hoffe auf freundliche Hilfe, nicht nur auf Verweise https://developer.android.com/guide/components/index.html, denn mein Englisch ist mehr als schlecht.
    Schöne Neujahrgrüße übrigens noch an alle, schymura.

  • Hallo und herzlich willkommen im Forum.


    Also das Problem mit dem Listview scrollTo habe ich auch gehabt bzw. klappt das sehr unsicher.
    Ich bin dazu übergegangen mir einfach die Auswahl des Listviews bzw. den zuletzt gewählten Eintrag zu holen
    und per


    listview.setSelection(gewaehltereintrag);


    wieder zu setzen, der Listview scrollt dann selbstständig dahin. (der selectierte Eintrag ist auf dem Bildschirm der erste am oberen Rand).


    Dein Spinnerproblem verstehe ich nicht ganz - mit getPosition bzw setSelection kannst du hier ja auch das letzte gewaehlte Item setzen.
    Wenn es DIr darum geht den Spinner einfach wieder zu öffnen dann.



    Java
    s = (Spinner) findViewById(R.id.spinner);
    
    
            s.performClick();
  • Hallo killphil75,
    danke für die schnelle Antwort.
    Anscheinend haben wir beide unterschiedliche SDK's.
    Bei mir gibt es beim Spinner wirklich kein getPosition(). Ich könnte höchstens mit getLastVisiblePosition() dienen.
    Das bringt mir aber überhaupt nichts, denn dadurch erfahre ich nun wirklich nicht, ob der Spinner gerade zur Auswahl geöffnet war oder nicht.
    So kann ich dann auch bei einem Orientierungswechsel nicht richtig reagieren.


    Dies Sache mit dem ListView statt dem ScrollView scheint interessant zu sein. Bekommst du denn in ein ListView auch alle anderen Objekte (Spinner, Button, ToggelButton, TextViews etwa) hinein? Wenn ja, könnte ich das ja noch ändern.....
    Schöne Grüße, schymura ^^

  • -> na die Sache mit dem Spinner hängt ja immer an einem Adapter, da bekommst du die Position der Auswahl her.
    Den Wert einfach Speichern und in onSaveInstanceState verarbeiten bzw. retten.


    Java
    Dies Sache mit dem ListView statt dem ScrollView scheint interessant zu sein. Bekommst du denn in ein ListView auch alle anderen Objekte (Spinner, Button, ToggelButton, TextViews etwa) hinein?


    Da verstehe ich jetzt die Frage nicht richtig - meinst du in das Layout ?


    Es gibt ja die vorgefertigten Layouts für einen Listvies einzeilig, zweizeilig - wenn du eigene Dinge/ein eigenes Layout in einen Listview packen willst, benötigst du einen Adapter der eigene Views handeln kann.


    Hier ein Tutorial auf deutsch:


    http://www.androidblogger.ch/?p=66&lang=de


    und englisch -> Vogella liefert immer gute Lösungen bzw. Tutorials


    http://www.vogella.com/articles/AndroidListView/article.html

  • Hallo killphil75,
    danke für die wieder sehr schnelle Antwort.
    Der Links für das Tutorial auf deutsch hat mir sehr geholfen, jetzt kann ich also die ganze Einstellungssache in eine ListView packen, die ja dann von selbst "richtig" scrollt. wenn man es ihr sagt.

    Zitat

    -> na die Sache mit dem Spinner hängt ja immer an einem Adapter, da bekommst du die Position der Auswahl her.

    Ja, stimmt, da habe ich dann auch getPosition() und so gefunden. Nur leider hilft mir das auch nicht viel, dann dadurch weiß ich ja immer noch nicht, ob die geöffnete Spinnerauswahl angezeigt wurde als die Orientierung des Gerätes geändert wurde, oder ob der Spinner gerade geschlossen war, so dass ich dessen Auswahl nicht öffnen muss in onSaveInstanceState.


    Wenn es denn überhaupt keine Möglichkeit geben sollte bei einem Spinner diesen Zustand abzufragen und entsprechend zu reagieren, dann müsste ich die Spinner durch einfache Button ersetzen, die dann jeweils einen Auswahldialog anzeigen müssten.
    Dann wüsste ich zumindest, ob gerade die Auswahl angezeigt wurde, oder nicht und könne entsprechend reagieren.
    Dankbare Grüße,
    schymura ^^

  • Alles klar, du willst also sicherstellen, wenn jemand deinen Spinner öffnet / dabei das Gerät dreht / das der Spinner auch wieder aufgemacht wird.


    hmmm, wenn das Android von Hause aus nicht automatisch macht, könnte ich mir nur ne Bastellösung vorstellen -< das Problem ist das spinner zwar laut Papier einen onClick implementiert aber laut Aussagen einiger GoogleGroups dieses Event niemals gefeuert wird.


    Jetzt muss ich aber noch mal ganz genau nachfragen -> du baust Dir gerade eine Seite mit Einstellungen zusammen ? Richtig ?
    Warum benutzt du nicht die Android übliche Variante -> PreferenceActivity ? -> da kümmert sich Android um das sichern bzw wiederherstellen der Zustände/Daten.


    Ich hab leider keine deutschen Quellen gefunden, hier aber etwas mit viel Bildern


    http://androidresearch.wordpre…ence-activity-in-android/


    http://www.helloandroid.com/tu…preferenceactivity-basics

  • Hallo killphil75,
    nochmals danke für die schnelle Antwort.

    Zitat

    Jetzt muss ich aber noch mal ganz genau nachfragen -> du baust Dir gerade eine Seite mit Einstellungen zusammen ? Richtig ?


    Warum benutzt du nicht die Android übliche Variante ->
    PreferenceActivity ? -> da kümmert sich Android um das sichern bzw
    wiederherstellen der Zustände/Daten.

    Wahrscheinlich, weil ich diese Variante nicht gefunden hatte, bin ja schließlich wirklich Anfänger bei Android und Java. So hatte ich mir also eine eigene Einstellungsseite zusammen gebastelt, die auch in soweit gut funktioniert, bis auf die Spinnersache beim Orientierungswechsel.
    So werde ich also mal die
    PreferenceActivity testen um zu sehen, ob das so läuft, wie ich es mir wünsche.
    Danke und schöne Grüße, schymura ^^

  • Hallo,
    nachdem ich nun die Ratschläge von killphil75 ausprobiert habe kann ich nur sagen, super!
    Alles läuft wie gewünscht. In der PreferenceActivity werden dann die Dialoge nach dem Orientierungswechsel (das Gerät wurde gedreht) hinter den Spinner Objekten von Android wieder angezeigt, wenn sie gerade bei drehen des Gerätes angezeigt wurden.
    Und auch das ScrollView wird dann in etwa wieder richtig positioniert......
    Danke nochmals und schöne Grüße, schymura :sleeping:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!