从不同的活动返回后恢复数据丢失

问题描述

我是 android 编程的新手,我想我遇到了一个非常基本的问题。实际上搜索了两天的stackoverflow,但我无法找到适合我情况的解决方案。 所以总而言之,我尝试申请计算。 我有 5 个活动:MainActivity、ActivityA(从 ArrayList 中选择某物并取值)、ActivityB(再次选择某物并从 ArrayList 中取值)、ActivityC(输入值然后取另一个值)、Activity D(输入值并取另一个值) ) 然后在 Mainactivity 中,这些值将用于方程式。

我使用 Intent 获取值,并在 onresume 中对 Intent 进行编码。 首先,我转到 ActivityA 并选择我想要的内容并返回到 Mainactivity 并获得所需的值,但是当我为 ActivityB 执行此操作并返回到 Mainactivity 时,我丢失了 ActivityA 的值,因为我认为程序再次执行意图ActivityA 也是(对于所有其他活动也是如此)。所以我认为我需要以某种方式将所有活动的意图分开。我尝试使用 sharedpreferences 或在所有具有不同值的活动上创建相同的字符串,以便在 onresume 部分的 if 或 switch case 中使用,不幸的是我没有成功。

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){

    }

} 

解决方法

问题是您无法将数据从活动 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();
    
    }
    }

//活动A

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();
    }
    }

//活动B

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();
    }
    }