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
有关更多详细信息,请查看下面的链接。
参考:
- How to manage startActivityForResult on Android?
- Activity Results API: A better way to pass data between Activities
- How to return a result (startActivityForResult) from a TabHost Activity?
我正在制作一个小窗体的应用程序,点击会改变 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
有关更多详细信息,请查看下面的链接。
参考:
- How to manage startActivityForResult on Android?
- Activity Results API: A better way to pass data between Activities
- How to return a result (startActivityForResult) from a TabHost Activity?