OnSaveInstanceState no funciona
El último enlace no se abre al regresar de otra pestaña y también onPause () no está funcionando. It muestra la excepción de puntero nulo y la aplicación se cierra automáticamente al hacer clic en otra pestaña excepto en la primera. Fragmento de código de pestaña
public class FragmentTab extends Fragment { protected WebView myWebView; @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_layout, container, false); WebView myWebView = (WebView) v.findViewById(R.id.webview); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); myWebView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; } }); if(savedInstanceState != null) myWebView.restoreState(savedInstanceState); else myWebView.loadUrl("http://www.example.com"); return v; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); myWebView.saveState(outState); } }
Y aquí están las principalesActividad
- Cómo mostrar advertencia / error si el id de recurso utilizado pertenece a otro esquema de actividad
- Video ffmpeg comprimido pero no se reproduce en el navegador
- Cómo utilizar Google Plus Integration en Android Studio
- Compilación con el origen de otro módulo en Android Studio
- Error (1,1) ilegalcharacter '\ ufeff' al compilar en android studio
public class MainActivity extends FragmentActivity { private FragmentTabHost mTabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost); mTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent); mTabHost.addTab( mTabHost.newTabSpec("tab1").setIndicator(null,ContextCompat.getDrawable(this,R.drawable.home)), FragmentTab.class, null); mTabHost.addTab( mTabHost.newTabSpec("tab2").setIndicator(null,ContextCompat.getDrawable(this,R.drawable.deals_offers)), FragmentTab.class, null); mTabHost.addTab( mTabHost.newTabSpec("tab3").setIndicator(null,ContextCompat.getDrawable(this,R.drawable.profile)), FragmentTab.class, null); mTabHost.addTab( mTabHost.newTabSpec("tab4").setIndicator(null, ContextCompat.getDrawable(this, R.drawable.menu)), FragmentTab.class, null); } }
- Gradle no puede construir ActionBarSherlock
- Módulo de la biblioteca de Java de Android Studio vs. Módulo de la biblioteca de Android
- ¿Cómo copiar o usar bibliotecas nativas con Android Studio Gradle?
- Android studio no reconoce el emulador en ejecución
- Importación de una aplicación app-comat v7 eclipse project al android studio
- Android Studio: unmappable character para codificar UTF-8
- No se puede procesar Google+ SignInButton
- Android Studio atascado al crear nuevo Proyecto en Gradle: Configurar Proyecto o Gradle: Resolver Dependencias ': classpath:'
Utilice esta biblioteca: https://github.com/frankiesardo/icepick
Quitar protegido de WebView
@State WebView myWebView; // This will be automatically saved and restored
Agregue la línea siguiente en su resto de método de la actividad será manejado.
En el método OnCreate
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Icepick.restoreInstanceState(this, savedInstanceState); }
En onSaveInstanceState
@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Icepick.saveInstanceState(this, outState); }
Parece myWebView siempre nulo en su código:
public class FragmentTab extends Fragment { protected WebView myWebView; @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_layout, container, false); myWebView = (WebView) v.findViewById(R.id.webview); // instead of WebView myWebView = (WebView) v.findViewById(R.id.webview); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); myWebView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; } }); if(savedInstanceState != null) myWebView.restoreState(savedInstanceState); else myWebView.loadUrl("http://www.example.com"); return v; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); myWebView.saveState(outState); } }
@Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); myWebView.saveState(savedInstanceState); } @Override public void onRestoreInstanceState(Bundle outState) { super.onRestoreInstanceState(outState); myWebView.restoreState(outState); }
De acuerdo al código fuente.
/** * Restores the state of this WebView from the given Bundle. This method is * intended for use in {@link android.app.Activity#onRestoreInstanceState} * and should be called to restore the state of this WebView. If * it is called after this WebView has had a chance to build state (load * pages, create a back/forward list, etc.) there may be undesirable * side-effects. Please note that this method no longer restores the * display data for this WebView. * * @param inState the incoming Bundle of state * @return the restored back/forward list or null if restoreState failed */ public WebBackForwardList restoreState(Bundle inState) { checkThread(); return mProvider.restoreState(inState); }
- Android y Proguard – cómo ofuscar, pero no optimizar ningún código?
- Android: Llamar a métodos no estáticos desde una clase de controlador estático