Android 意图失败

Android Intent fail

我正在制作一个小窗体的应用程序,点击会改变 activity

在第二个 activity 中,您应该看到输入的数据,当您单击按钮时 return 相同的数据,以便对它们进行编辑

该应用程序可以很好地向第二个发送数据activity

但是当 return 编辑数据时,将意图添加到 return 应用程序不起作用

主要Activity

package com.niccode.desarrollounaapp;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.datepicker.MaterialDatePicker;
import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener;


public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button Siguiente = (Button) findViewById(R.id.Siguiente);

        final EditText etName         = (EditText) findViewById(R.id.tiNombreCompleto);
        final EditText etFecha       = (EditText)findViewById(R.id.Calendario);
        final EditText etTelefono    = (EditText)findViewById(R.id.tiTelefono);
        final EditText etEmail       = (EditText)findViewById(R.id.tiEmail);
        final EditText etDescripcion = (EditText) findViewById(R.id.tiDescripcionContacto);


        MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
        builder.setTitleText(getResources().getString(R.string.date1));

        final MaterialDatePicker<Long> materialDatePicker = builder.build();

        etFecha.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                materialDatePicker.show(getSupportFragmentManager(), "DATE_PICKER");

            }
        });

        materialDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener() {
            @Override
            public void onPositiveButtonClick(Object selection) {
                etFecha.setText(materialDatePicker.getHeaderText());
            }
        });


        Siguiente.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(MainActivity.this, Confirmar_Datos.class);

                intent.putExtra(getResources().getString(R.string.pname), etName.getText().toString());
                intent.putExtra(getResources().getString(R.string.pdate),  etFecha.getText().toString());
                intent.putExtra(getResources().getString(R.string.ptelefono), etTelefono.getText().toString());
                intent.putExtra(getResources().getString(R.string.pemail),  etEmail.getText().toString());
                intent.putExtra(getResources().getString(R.string.pDescripcion),  etDescripcion.getText().toString());

                startActivity(intent);
                finish();


            }
        });

        Bundle para_back = getIntent().getExtras();

        assert para_back != null;
        final String nombre_return      = para_back.getString(getResources().getString(R.string.rtname));
        final String fecha_return       = para_back.getString(getResources().getString(R.string.rtdate));
        final String telefono_return    = para_back.getString(getResources().getString(R.string.rtelefono));
        final String email_return       = para_back.getString(getResources().getString(R.string.rtemail));
        final String descripcion_return = para_back.getString(getResources().getString(R.string.rtDescripcion));

        etName.setText(nombre_return);
        etFecha.setText(fecha_return);
        etTelefono.setText(telefono_return);
        etEmail.setText(email_return);
        etDescripcion.setText(descripcion_return);
    }
}

第二种布局

package com.niccode.desarrollounaapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Confirmar_Datos extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.confirmar_datos);

        Button Regresar = (Button) findViewById(R.id.regresar);

        Bundle parametros = getIntent().getExtras();
        assert parametros != null;
        final String str_nombre = parametros.getString(getResources().getString(R.string.pname));
        final String str_fecha = parametros.getString(getResources().getString(R.string.pdate));
        final String str_telefono = parametros.getString(getResources().getString(R.string.ptelefono));
        final String str_email = parametros.getString(getResources().getString(R.string.pemail));
        final String str_descripcion = parametros.getString(getResources().getString(R.string.pDescripcion));


        final TextView tvnombre = findViewById(R.id.Nombre_Completo_Confirmado);
        final TextView tvfecha  = findViewById(R.id.fecha_de_nacimiento_Confirmado);
        final TextView tvTelefono  = findViewById(R.id.tel_Confirmado);
        final TextView tvEmail = findViewById(R.id.mail_Confirmado);
        final TextView tvDescripcion = findViewById(R.id.Descripcion_Confirmado);

        tvnombre.setText(str_nombre);
        tvfecha.setText(str_fecha);
        tvTelefono.setText( str_telefono);
        tvEmail.setText(str_email);
        tvDescripcion.setText(str_descripcion);



        Regresar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent regresar = new Intent (Confirmar_Datos.this, MainActivity.class);
               regresar.putExtra(getResources().getString(R.string.rtname) , str_nombre);
               regresar.putExtra(getResources().getString(R.string.rtdate), str_fecha);
               regresar.putExtra(getResources().getString(R.string.rtelefono), str_telefono);
               regresar.putExtra(getResources().getString(R.string.rtemail), str_email);
               regresar.putExtra(getResources().getString(R.string.rtDescripcion), str_descripcion);
               startActivity(regresar);
            }
        });


        }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK){
            Intent intent = new Intent(Confirmar_Datos.this, MainActivity.class);
            startActivity(intent);
        }
        return super.onKeyDown(keyCode, event);

    }
    }

字符串文件

<resources>
    <string name="app_name">DesarrolloUnaApp</string>
    <string name="nombre_completo">Nombre Completo</string>
    <string name="telefono">Teléfono</string>
    <string name="email">  Email</string>
    <string name="descripcion_contacto">Descripción del Contacto</string>
    <string name="siguiente">Siguiente</string>
    <string name="date1">Fecha de Nacimiento</string>
    <string name="confirmar">Confirmar Datos</string>
    <string name="pname">Name</string>
    <string name="pdate">Date</string>
    <string name="ptelefono">Telefono</string>
    <string name="pemail">Email</string>
    <string name="pDescripcion">Descripcion</string>
    <string name="editar_datos">Editar Datos</string>
    <string name="tvdate">Date : </string>
    <string name="tvtelefono">Telefono : </string>
    <string name="tvemail">Email : </string>
    <string name="tvDescripcion">Descripcion : </string>

    <string name="rtname">Nombre</string>
    <string name="rtdate">Fecha</string>
    <string name="rtelefono">Telefono</string>
    <string name="rtemail">Email</string>
    <string name="rtDescripcion">Descripcion</string>

</resources>

试试这个。在 MainActivity 中定义 SECOND_ACTIVITY 变量如下

Public class MainActivity extends AppCompatActivity {
private static final int SECOND_ACTIVITY = 0;

更新以下行
Intent regresar = new Intent (Confirmar_Datos.this, MainActivity.class);

Intent regresar = new Intent (this, Confirmar_Datos.class);

startActivity(regresar);替换为

startActivityForResult(regresar, SECOND_ACTIVITY);

在第二个 activity 中将 Intent regresar = new Intent (Confirmar_Datos.this, MainActivity.class); 替换为

Intent regresar = new Intent()

同时将 startActivity(regresar); 替换为

setResult(Activity.RESULT_OK,regresar);
finish();

第一个 activity 数据将是 onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent return_data) {
     super.onActivityResult(requestCode, resultCode, return_data);
     if (requestCode == SECOND_ACTIVITY) {
         if(resultCode == Activity.RESULT_OK){
             String result=return_data.getStringExtra("key"); // This from regresar.putExtra
          }
     }
}//onActivityResult

有关更多详细信息,请查看下面的链接。


参考: