#android #runtime #state #landscape #handle
#Android #время выполнения #состояние #пейзаж #обрабатывать
Вопрос:
Моя проблема в том, что я не могу обрабатывать операции в портретном и ландшафтном режимах. На экране у меня есть одна форма регистрации, но она находится в отключенном состоянии. Когда я нажму кнопку регистрации, которая появится. Итак, когда я перейду в альбомную ориентацию, если я поверну экран, что снова появится в исчезнувшем портрете. Поэтому, пожалуйста, дайте несколько советов, как я могу с этим справиться.
код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.equipmentmanagement);
context = this;
insertAnalasysMethodVlaues();
insertEquipmentTypeValues();
initUI();
showEquipmentTypeSpinner();
showAnalasisTypeSpinner();
equipmentTable = new EquipmentTable(context);
listequipment = equipmentTable.selectAllRecords();
showRecords(listequipment);
equipment_add.setOnClickListener(this);
equipment_search.setOnClickListener(this);
search.setOnClickListener(this);
insert.setOnClickListener(this);
cancel.setOnClickListener(this);
equipmentmanagement_text.setOnClickListener(this);
equipment_loadall.setOnClickListener(this);
equipment_type_spinner.setOnItemSelectedListener(this);
analysis_method_spinner.setOnItemSelectedListener(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
Комментарии:
1. Примечание: не используйте
onConfigurationChanged()
без необходимости.2. Если вы хотите установить ориентацию экрана, чем в вашем манифесте, установите это ….. <activity android:name=»YourActivity» android:screenOrientation=»portrait»> </ activity> и ваша проблема может быть решена
Ответ №1:
Что вам нужно сделать, это сохранить, если логин отображается пользователю. Один из способов сделать это — переопределить onSaveInstanceState()
и добавить информацию в Bundle
:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("login_visible", isLoginVisible);
}
А затем в onCreate вы можете получить значение из savedInstanceState
следующего:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if(savedInstanceState != null) {
boolean isLoginVisible = savedInstanceState.getBoolean("login_visible");
if(isLoginVisible) {
// Set the visibility of the login back to View.VISIBLE!
}
}
}
Комментарии:
1. На самом деле, я пробовал это, но мне это не удалось. Проблема здесь в том, что когда я нахожусь на странице регистрации, если я поворачиваю экран, который вызывает destroy после этого oncreate. итак, действие начинается снова.
2. Да, конечно.
Activity
Воссоздается при изменении конфигурации. Это совершенно нормально. Решение в моем ответе специально предназначено для решения этой проблемы. Вы можете добавить всю информацию, которую хотите сохранить, вBundle
inonSaveInstanceState()
и снова прочитать ее изBundle
inonCreate()
. То, что вы добавляетеBundle
, сохраняется независимо от того, сколько разActivity
оно воссоздается.
Ответ №2:
Вы можете использовать некоторые значения флага integer/boolean
, чтобы сохранить состояния формы. и в protected void onCreate(Bundle savedInstanceState) {}
привязке представления в соответствии с состоянием формы. т. Е. Вы можете отображать кнопку «Отключено / включено» в зависимости от состояния формы.
Ответ №3:
boolean isSearch = false,isModification = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.equipmentmanagement);
initUI();
if(savedInstanceState != null)
{
boolean isSearch = savedInstanceState.getBoolean("search_visible");
boolean isModification = savedInstanceState.getBoolean("modification_visible");
if(isSearch)
{
searchEquipmentDetails();
}
else if(isModification)
{
showEquipmentModificationDetails();
}
else
{
loadall();
}
}
context = this;
insertAnalasysMethodVlaues();
insertEquipmentTypeValues();
showEquipmentTypeSpinner();
showAnalasisTypeSpinner();
equipmentTable = new EquipmentTable(context);
listequipment = equipmentTable.selectAllRecords();
showRecords(listequipment);
equipment_add.setOnClickListener(this);
equipment_search.setOnClickListener(this);
search.setOnClickListener(this);
insert.setOnClickListener(this);
cancel.setOnClickListener(this);
equipmentmanagement_text.setOnClickListener(this);
equipment_loadall.setOnClickListener(this);
equipment_type_spinner.setOnItemSelectedListener(this);
analysis_method_spinner.setOnItemSelectedListener(this);
}
это код для записи в create для сравнения состояния
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("search_visible", isSearch);
outState.putBoolean("modification_visible", isModification);
}
Вы должны указать состояние проекта.
И убедитесь, что выполняете логические изменения при нажатии на элементы.
private void searchEquipmentDetails()
{
isSearch = true;
isModification = false;
equipment_details.setVisibility(View.GONE);
equipment_modifications.setVisibility(View.GONE);
equipment_details_search.setVisibility(View.VISIBLE);
equipment_search_edittext.setText("");
}
private void showEquipmentModificationDetails()
{
isSearch = false;
isModification = true;
equipment_details.setVisibility(View.GONE);
equipment_modifications.setVisibility(View.VISIBLE);
equipment_details_search.setVisibility(View.GONE);
equipment_name_edittext.setText("");
equipment_id_edittext.setText("");
insert.setText("Insert");
b = true;
}
Я думаю, что таким образом мы обработаем изменения приложения во время выполнения и сохраним состояние.