Scrollposition speichern/merken

  • Hallo,


    ich habe eine WebView in der ein langer Text angezeigt wird.
    Nun möchte ich, dass beim nächsten mal, wenn die App gestartet wird, die Ansicht wieder zu der gleichen Position springt und nicht wieder ganz oben steht. Ist das in einer WebView möglich?


    Das gleiche Problem habe ich, wenn ich den Bildschirm drehe. Auch dabei müsste die Position gemerkt werden.



  • Da WebView auch nur vom View erbt, sollte das möglich sein





    computeVerticalScrollOffset()
    computeHorizontalScrollOffset


    bzw.


    getScrollX()
    getScrollY()


    sollte Die die aktuelle Scrollposition zurückliefern, welche du Speichern müsstest




    und per scrollTo() solltest du da wieder hinscrollen können.



    PS:


    also in deinem Falle müsstest du die Scrollposition am besten in der onPause Funktion deiner Activity abfragen und abspeichern.


    und umgekehrt: bei onResume den gespeicherten Wert auslesen und wieder neu setzen.

  • na gut - weil du's bist... B-)



    Ein bisschen anpassen musst du dann aber noch. Und die -1 ist sehr gut, weil dann klar ist, das gar keine Position vorhanden war - du darfst aber auch gerne 0 eintragen, um die Defaultpostion 0 zu bekommen.

  • vielen Dank. Das Speichern und Auslesen funktioniert.


    Jetzt habe ich aber noch das Problem, dass beim starten der Activity nicht zu der Position gescrollt wird.
    Ich vermute, dass es zu lange dauert, bis die Datei geladen ist.
    Gibt es eine Möglichkeit zu warten bis die Datei geladen ist?


    Java
    WebView mWebView;
      	public void onCreate(Bundle savedInstanceState) {
      		super.onCreate(savedInstanceState);
      		setContentView(R.layout.leseprobeactivity);
      		
      		mWebView = (WebView) findViewById(R.id.webLeseprobe);
      		mWebView.getSettings().setJavaScriptEnabled(true);
      		mWebView.loadUrl("file:///android_asset/leseprobe.html");
    hier müsste das Programm warten, bis die Datei geladen ist und dann das Scrollen ausführen.
      	}


    Java
    protected void onPause() {
      		super.onPause();
      		myPostionX = mWebView.getScrollY();
      		// SharedPreferences setzen mit Editor
      		SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      		SharedPreferences.Editor editor = settings.edit();
      		editor.putInt("positionX", myPostionX);
      		editor.commit(); // Commit the edits!
      	}


    Java
    protected void onResume() {
      		super.onResume();
      		// SharedPreference lesen
      		SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
      		myPostionX = settings.getInt("positionX", 0);
      		mWebView.scrollTo(0, myPostionX);
      	}
  • Also bei Stackoverflow gibt es diese Lösungs dazu - die überschrieben beim WebView die Methode onPageFinish:



Jetzt mitmachen!

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