Android 当活动B被调用并返回到活动A时,如何在活动A中存储数据

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

详细信息-要在活动A和转到活动B中存储textview的数据,请执行一些操作并返回到活动A。应保存存储的数据并在活动A中为textview设置文本。是否有解决方案。我尝试了SaveInstanceState和RestoreInstanceState,但没有成功

   @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接口来处理项目单击。此接口的实现将在活动或片段中。将此侦听器设置为适配器,并在单击项目视图时调用