在活动之间传递值然后返回,方法反向不起作用

时间:2015-02-17 16:44:51

标签: android webview bundle

我创建一个使用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我的应用程序崩溃了?

3 个答案:

答案 0 :(得分:0)

与您呼叫的MainActivity2一样,

startActivityForResult(_webView,0);

您必须实施onActivityResult()

然后在WebView活动中,

致电finish()。如果您希望webview获得成功,请写下setResult(0)

然后不需要再次启动MainActivity2。由于MainActivity2已在应用程序堆栈中可用。

所以在webView中只需写一下,

@Override
public void onBackPressed() {
    finish();
}

现在发布您的代码,

当您从webview活动再次开始MainActivity2时,

在您的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将恢复。