Данные потеряны при возобновлении работы после возвращения с разных мероприятий

Я новичок в программировании для Android, и я думаю, что столкнулся с очень простой проблемой. На самом деле искал stackoverflow два дня, но не могу найти решение для своей ситуации. Итак, в заключение я пытаюсь подать заявку на расчет. У меня есть 5 действий: MainActivity, ActivityA (выбор чего-то и получение значения из ArrayList), ActivityB (снова выбор чего-то и получение значения из ArrayList), ActivityC (ввод значения и получение другого значения), Activity D (ввод значения и получение другого значения ) Затем в Mainactivity эти значения будут использоваться для уравнения.

Я беру значения, используя намерение, и я закодировал намерение в onresume. Сначала я иду в ActivityA и выбираю то, что хочу, и возвращаюсь обратно в Mainactivity, и у меня есть требуемое значение, но когда я делаю это для ActivityB и возвращаюсь обратно в Mainactivity, я потерял значение из ActivityA, потому что я думаю, что программа снова выполняет намерение для ActivityA также (то же самое для всех других действий). Поэтому я думаю, что мне нужно как-то разделить намерение для всех действий. Я пытался использовать общие настройки или создавать одну и ту же строку для всех действий с разными значениями для использования в случае if или switch в части onresume, к сожалению, мне это не удалось.

public class MainActivity extends AppCompatActivity {

    //Değerlerin girildiği text kutucuklarının tanımlanması
    EditText designPressure;
    EditText corrosionAllowance;
    EditText pipeDiameter;
    EditText selectedMaterial;
    EditText selectedAllowableStress;
    EditText selectedPipeClass;
    EditText selectedWeldFactor;
    EditText selectedTemperature;
    EditText selectedTempFactor;
    EditText selectedLocation;
    EditText selectedDesignFactor;

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

        //Değerlerin girildiği textkutucuklarının eşleştirilmesi
        designPressure = findViewById(R.id.designPressure);
        corrosionAllowance = findViewById(R.id.corrosionAllowance);
        pipeDiameter = findViewById(R.id.pipeDiameter);
        selectedMaterial = findViewById(R.id.selectedMaterial);
        selectedAllowableStress = findViewById(R.id.selectedAllowableStress);
        selectedPipeClass = findViewById(R.id.selectedPipeClass);
        selectedWeldFactor = findViewById(R.id.selectedWeldFactor);
        selectedTemperature = findViewById(R.id.selectedTemperature);
        selectedTempFactor = findViewById(R.id.selectedTempFactor);
        selectedLocation = findViewById(R.id.selectedLocation);
        selectedDesignFactor = findViewById(R.id.selectedDesignFactor);
    }

    @Override
    public void onResume(){

        super.onResume();

        Intent intent = getIntent();

        //Malzeme sayfasından bilgi alan kısım
        String selectedM = intent.getStringExtra("Material");
        selectedMaterial.setText(selectedM);
        String selectedAS = intent.getStringExtra("Allowable Stress");
        selectedAllowableStress.setText(selectedAS);

        //WeldFactor sayfasından bilgi alan kısım
        String weldFactors = intent.getStringExtra("Type");
        selectedPipeClass.setText(weldFactors);
        String eFactor = intent.getStringExtra("eFactor");
        selectedWeldFactor.setText(eFactor);
        // TempFactor sayfasından bilgi alan kısım
        String selectedTF = intent.getStringExtra("selectedTFactor");
        selectedTempFactor.setText(selectedTF);
        String selectedDT = intent.getStringExtra("selectedDTemp");
        selectedTemperature.setText(selectedDT);
        }

    //SelectMaterial tuşuna basınca MaterialList sayfasına giden toMAterialList onclick metodu
    public void toMaterialList(View view){

        Intent intentMaterial = new Intent(MainActivity.this, MaterialList.class);

        startActivity(intentMaterial);
    }

    //SelectWeldFactor tuşuna basınca WeldFactor sayfasına giden toWeldFactor onclick metodu
    public void toWeldFactor(View view){

        Intent intentWeldFactor = new Intent(MainActivity.this, WeldFactor.class);

        startActivity(intentWeldFactor);
    }

    //SelectTempFactor tuşuna basınca TempFactor sayfasına giden toTempFactor onclick metodu
    public void toTempFactor(View view){

        Intent intentTempFactor = new Intent(MainActivity.this, TempFactor.class);

        startActivity(intentTempFactor);
    }

    public void toDesignFactor(View view){

        Intent intentdesignFactor = new Intent(MainActivity.this, DesignFactor.class);

        startActivity(intentdesignFactor);
    }

    public void calculate(View view){

    }

} 
1
0
179
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы не можете отправить данные из действия B в действие A. Если вы хотите, вы должны использовать startActivityForResult. Вы не можете получить данные из действия, которое уничтожено.

Лучший способ для вас — использовать sharedpreferences .

//Основная деятельность

    public class MainActivity extends AppCompatActivity {
       public static final String MyPREFERENCES = "MyPrefs" ;
       public static final String selectedMaterial = "selectedMaterial";
       public static final String selectedAllowableStress = "selectedAllowableStress";
       public static final String selectedTemperature = "selectedTemperature";
   // For get strings
      public static final String _selectedTemperature;
        public static final String _selectedAllowableStress;
       public static final String _selectedMaterial;

       SharedPreferences sharedpreferences;
    
    @Override
    public void onResume(){
        super.onResume();
              sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedpreferences.edit();
      _selectedMaterial=editor.getString(selectedMaterial, "");
       _selectedAllowableStress=editor.getString(selectedAllowableStress, "");
                _selectedTemperature=editor.getString(selectedTemperature, "");
                editor.commit();
    
    }
    }

//Активность А

public class ActivityA extends AppCompatActivity {
     public static final String MyPREFERENCES = "MyPrefs" ;
     SharedPreferences sharedpreferences;
     public static final String selectedMaterial = "selectedMaterial";
    @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_a);
    
      sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
          SharedPreferences.Editor editor = sharedpreferences.edit();
          editor.putString(selectedMaterial, "material");
          editor.commit();
    }
    }

//Активность Б

public class ActivityB extends AppCompatActivity {
     public static final String MyPREFERENCES = "MyPrefs" ;
     SharedPreferences sharedpreferences;
     public static final String selectedMaterial = "selectedAllowableStress";
    @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_b);
    
      sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
          SharedPreferences.Editor editor = sharedpreferences.edit();
          editor.putString(selectedAllowableStress, "allow");
          editor.commit();
    }
    }

Большое спасибо, я просматриваю ваш пример кода и пытаюсь понять, потому что часть «статическая конечная строка» для меня нова.

Alienshow 20.12.2020 18:55

@Alienshow приветствую. «статический финал» не очень важен. вы можете удалить эту часть. Просто скажите, что существует только одна копия переменной, которую нельзя повторно инициализировать.

Shadman Adman 20.12.2020 20:35

Еще раз спасибо. Я вижу, что я неправильно пробовал общие настройки, теперь все в порядке.

Alienshow 22.12.2020 18:29

@Alienshow Ваше долгожданное тело. пожалуйста, примите ответ как правильный ответ.

Shadman Adman 23.12.2020 20:06

Другие вопросы по теме