как хранить данные в операции A, когда операция B вызывается и возвращается к операции A - PullRequest
0 голосов
/ 11 марта 2020

Подробно - Чтобы сохранить данные текстового обзора в задании A и перейти к заданию B, сделайте некоторую работу и вернитесь к заданию A. Сохраненные данные следует сохранить и установить текст для просмотра текста в задании A. Есть ли для этого решение? Я пытался onSaveInstanceState и onRestoreInstanceState, но не сработало.

   @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);

}

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Для обмена данными между действиями создайте класс модели Parcelable , в котором хранится ваша дата. Допустим, эти данные являются именем и адресом электронной почты.

public class FormData implements Parcelable {

    private String name;
    private String email;
    // Add here fields you need

    public FormData() {
    }

    protected FormData(Parcel parcel) {
        this.name = parcel.readString();
        this.email = parcel.readString();
        // Restore here other fields. Order of fields is important. Use same order in writeToParcel
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int flags) {
        parcel.writeString(name);
        parcel.writeString(email);
        // Save here other fields. Order of fields is important. Use same order in constructor
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public static final Creator<FormData> CREATOR = new Creator<FormData>() {

        @Override
        public FormData createFromParcel(Parcel source) {
            return new FormData(source);
        }

        @Override
        public FormData[] newArray(int size) {
            return new FormData[size];
        }
    };
}

Затем из ActivityA откройте ActivityB с помощью метода startActivityForResult . Внутри ActivityB, когда форма заполнена и нажата кнопка отправки, вы создаете экземпляр класса FormData, заполняете поля данными и возвращаете, как показано

Intent resultIntent = new Intent();
resultIntent.putExtra("result", formData);
setResult(RESULT_OK, resultIntent);
finish();

Затем вы можете получить результаты в методе ActivityAesResult

protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    // Check request & result codes before
    FormData formData = data.getParcelableExtra("result");

    formData.getName();
    formData.getEmail();
}
0 голосов
/ 11 марта 2020

Я вижу два варианта:

  1. Объявить атрибут Activity A android:launchMode="singleTask" в вашем манифесте. Это позволит только один экземпляр действия A в вашем приложении, что означает, что пользователь, добавленный в действие, всегда будет доступен при любом возвращении к этому действию.

  2. Сохранение данных в хранилище c атрибуты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...