Android 当活动B被调用并返回到活动A时,如何在活动A中存储数据
详细信息-要在活动A和转到活动B中存储textview的数据,请执行一些操作并返回到活动A。应保存存储的数据并在活动A中为textview设置文本。是否有解决方案。我尝试了SaveInstanceState和RestoreInstanceState,但没有成功Android 当活动B被调用并返回到活动A时,如何在活动A中存储数据,android,android-studio,Android,Android Studio,详细信息-要在活动A和转到活动B中存储textview的数据,请执行一些操作并返回到活动A。应保存存储的数据并在活动A中为textview设置文本。是否有解决方案。我尝试了SaveInstanceState和RestoreInstanceState,但没有成功 @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceSt
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
if(SelectedDate!=null){
savedInstanceState.putString("SELECTED_DATE", SelectedDate);
}
if(CUST_ID!=null){
savedInstanceState.putInt("CUST_ID", CUST_ID);
savedInstanceState.putString("CNAME", CNAME);
savedInstanceState.putString("CEMAIL", CEMAIL);
}
if(notes.getText().toString()!=null && !notes.getText().toString().equals(""))
{
addnotes = notes.getText().toString();
savedInstanceState.putString("ADD_NOTES", addnotes);
}
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
String SelectedDate = savedInstanceState.getString("SELECTED_DATE");
String cust_id = savedInstanceState.getInt("CUST_ID");
String addnotes = savedInstanceState.getString("ADD_NOTES");
if(SelectedDate!="")
invDate.setText(SelectedDate);
if(cust_id.toString()!=""){
customerLayout.setVisibility(View.VISIBLE);
cName.setText(CNAME);
cEmail.setText(CEMAIL);
}
if(addnotes!="")
notes.setText(addnotes);
}
我看到两种选择:
android:launchMode=“singleTask”
。这将只允许应用程序中的活动A的一个实例,这意味着放入活动中的数据用户将始终可用于此活动的任何恢复要在活动之间共享数据,请创建保存日期的模型类。假设这些数据是姓名和电子邮件
公共类FormData实现可包裹{
私有字符串名称;
私人字符串电子邮件;
//在此处添加您需要的字段
公共表单数据(){
}
受保护的FormData(包裹){
this.name=parcel.readString();
this.email=parcel.readString();
//在此处还原其他字段。字段的顺序很重要。在writeToParcel中使用相同的顺序
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效writeToParcel(Parcel-Parcel,int标志){
包裹。书面记录(姓名);
包裹。书面记录(电子邮件);
//在此处保存其他字段。字段的顺序很重要。在构造函数中使用相同的顺序
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
公共静态最终创建者=新创建者(){
@凌驾
public FormData createFromParcel(地块源){
返回新的FormData(源);
}
@凌驾
public FormData[]新数组(整数大小){
返回新的FormData[大小];
}
};
}
然后从ActivityA中使用方法打开ActivityB。在ActivityB中,当按下form filled and submit按钮时,您将创建FormData类实例,用数据填充字段并按如下方式返回
Intent resultent=newintent();
resultIntent.putExtra(“结果”,formData);
setResult(RESULT_OK,resultint);
完成();
然后可以在ActivityA的onActivityResult方法中获得结果
activityresult上受保护的void(int-requestCode、int-resultCode、Intent-data){
//检查请求和结果代码之前
FormData FormData=data.getParcelableExtra(“结果”);
formData.getName();
formData.getEmail();
}
尝试在onStop中保存数据并在onResumePost中还原您的代码,您做了什么?使用startActivityForResult()将在activity AThanks中编写的代码发布。但是没有起作用。我在清单中设置了活动-A的属性。还将字符串声明为static可能您在某处完成了活动A,或者在B中工作会影响活动A?我们是否需要使用startActivityForResult启动活动B?我没有让startActivityForResult调用活动B,因为我需要从AdapterActivityResult的onBindViewHolder调用它,所以当返回到活动A时,永远不会调用它。您可以创建onItemClickListener接口来处理项目单击。此接口的实现将在活动或片段中。将此侦听器设置为适配器,并在单击项目视图时调用