Я новичок в программировании для 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){
}
}
Проблема в том, что вы не можете отправить данные из действия 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 приветствую. «статический финал» не очень важен. вы можете удалить эту часть. Просто скажите, что существует только одна копия переменной, которую нельзя повторно инициализировать.
Еще раз спасибо. Я вижу, что я неправильно пробовал общие настройки, теперь все в порядке.
@Alienshow Ваше долгожданное тело. пожалуйста, примите ответ как правильный ответ.
Большое спасибо, я просматриваю ваш пример кода и пытаюсь понять, потому что часть «статическая конечная строка» для меня нова.