2015-04-18 17 views
10

So che ci sono più domande a riguardo ma sembrano tutte vecchie e non funzionano più - almeno per me. Sto cercando di salvare la posizione di una visualizzazione Web dopo che un utente ha terminato o ricaricato l'app. So che questo codice potrebbe essere utilizzato per salvare e caricare la Webview:Salvare lo stato di una WebView e ricaricare la posizione

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    myWebview.saveState(outState); 
} 

e in onCreate:

if (savedInstanceState != null) { 
    myWebview.restoreState(savedInstanceState); 
} 

Ma, nella pagina Developer Webview Android che dice quanto segue riguardo saveState:

"Salva lo stato di questo WebView utilizzato in onSaveInstanceState (Bundle) .Si prega di notare che questo metodo non memorizza più i dati di visualizzazione per questo WebView. Il comportamento precedente potrebbe potenzialmente perdere file se restoreState (Bundle) non è mai stato chiamato."

link - https://developer.android.com/reference/android/webkit/WebView.html

Se mi sbaglio e questo dovrebbe funzionare, potrebbe essere mia implementazione di un'altra funzione che salva la selezione filatore della pagina mostrata nella WebView e viene caricato in modo molto simile modo mostrato sopra. Forse l'utilizzo di entrambi non consente di caricare la posizione di WebView e solo la pagina? Ecco cosa ho attualmente per salvare quale pagina HTML viene caricata in WebView quando l'utente ricarica l'app.

mio onCreate:

if (savedInstanceState != null){ 
    mySpinner.setSelection(prefs.getInt("spinnerSelection", 0)); 
} 

mia onSaveInstanceState:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState){ 

    SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext()); 
    SharedPreferences.Editor editor = getPrefs.edit(); 

    values = Integer.parseInt(getPrefs.getString("pref_Sections", "1")); 
    switch (values) { 
     case 1: 
      int selectedPosition1 = mySpinner.getSelectedItemPosition(); 
      editor.putInt("spinnerSelection1", selectedPosition1); 
      editor.commit(); 
      break; 
     case 2: 
      int selectedPosition2 = mySpinner.getSelectedItemPosition(); 
      editor.putInt("spinnerSelection2", selectedPosition2); 
      editor.commit(); 
      break; 
    } 
    super.onSaveInstanceState(savedInstanceState); 
} 

Qualcuno ha tutte le risposte su questo tema, o è solo non funziona più come descritto in Android Developer WebView? Stavo considerando una soluzione matematica, ma al momento è fuori dalla mia esperienza e dovrei imparare di più su questo (in più non mi piace la matematica in generale!)

Grazie a tutte le risposte!

+0

Qual è la posizione della Webview? È la stessa cosa che url # posiziona sul browser? – inmyth

+0

Quanto in basso nella pagina web l'utente ha letto il contenuto. Voglio che quella posizione sia salvata e ricaricata quando l'utente torna all'applicazione. – user1363871

+0

sei in grado di modificare il lato HTML/Javascript di questo, o puoi modificare solo sul lato client/Webview? – EpicPandaForce

risposta

6

È possibile utilizzare getScrollY() per ottenere la posizione verticale della propria webview. Salvarlo in onSaveInstanceState

Quindi, utilizzare scrollTo(x, y) per ripristinare la posizione:

yourWebview.scrollTo(0, savedYPosition); 
+0

Che tipo di incidente? – ToYonos

+0

Nessun arresto anomalo, funziona benissimo! Grazie per l'aiuto! – user1363871