我创建一个使用3个活动的应用程序,在第一个活动中我在编辑文本中键入一个单词,然后我将该值传递给另一个活动("第二个活动"),最后得到该值和我转到webview显示网页,但当我尝试从webview返回第二个活动时,我的应用程序崩溃, 这是我在第一个活动中的代码。
Button _accion;
EditText _capturaValor;
String _guardarValor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_capturaValor = (EditText)findViewById(R.id.valor);
_accion = (Button)findViewById(R.id.btnAccion);
_accion.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
_guardarValor = _capturaValor.getText().toString();
if(_capturaValor.getText().length()!=0) {
Intent _webView = new Intent(getApplicationContext(), MainActivity2.class);
Bundle _pasarValor = new Bundle();
_pasarValor.putSerializable("guardarValor", _guardarValor);
_webView.putExtras(_pasarValor);
startActivityForResult(_webView, 0);
}else{
Toast.makeText(getApplicationContext(),"Escribe algo",Toast.LENGTH_LONG).show();
}
}
});
}
在我的第二个活动中,我有这个代码
Button _accion;
EditText _capturaValor;
String _guardarValor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity2);
Bundle _obtenerValor = this.getIntent().getExtras();
String _valorRecuperado = (String)_obtenerValor.getSerializable("guardarValor");
_capturaValor = (EditText)findViewById(R.id.valor);
_accion = (Button)findViewById(R.id.btnAccion);
_capturaValor.setText(_valorRecuperado);
_accion.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
_guardarValor = _capturaValor.getText().toString();
Intent _webView = new Intent(getApplicationContext(),webView.class);
Bundle _pasarValor = new Bundle();
_pasarValor.putSerializable("valor",_guardarValor);
_webView.putExtras(_pasarValor);
startActivityForResult(_webView,0);
}
});
}
最后在我的webView课程中我有了这个
WebView _navegador;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
Bundle _obtenerValor = this.getIntent().getExtras();
String _valorRecuperado = (String)_obtenerValor.getSerializable("valor");
_navegador = (WebView)findViewById(R.id.webView);
_navegador.getSettings().setJavaScriptEnabled(true);
_navegador.getSettings().getJavaScriptEnabled();
_navegador.setWebViewClient(new WebViewClient());
_navegador.loadUrl("https://www."+_valorRecuperado+".com");
}
@Override
public void onBackPressed() {
super.onBackPressed();
Intent _regresar = new Intent(getApplicationContext(),MainActivity2.class);
startActivity(_regresar);
}
为什么当我试图回到MainActivity2.class我的应用程序崩溃了?
答案 0 :(得分:0)
与您呼叫的MainActivity2
一样,
startActivityForResult(_webView,0);
您必须实施onActivityResult()
。
然后在WebView
活动中,
致电finish()
。如果您希望webview
获得成功,请写下setResult(0)
然后不需要再次启动MainActivity2
。由于MainActivity2
已在应用程序堆栈中可用。
所以在webView
中只需写一下,
@Override
public void onBackPressed() {
finish();
}
现在发布您的代码,
当您从webview活动再次开始MainActivity2
时,
onCreate()
中
Bundle _obtenerValor = this.getIntent().getExtras();
String _valorRecuperado = (String)_obtenerValor.getSerializable("guardarValor");
这些行抛出错误。
答案 1 :(得分:0)
您不需要super.onBackPressed();
只写,
@Override
public void onBackPressed() {
Intent _regresar = new Intent(getApplicationContext(),MainActivity2.class);
startActivity(_regresar);
finish(); //don't forget to call this
}
答案 2 :(得分:0)
您不需要方法onBackPressed()
。按后退按钮将关闭webView
活动,MainActivity2
将恢复。