Вот моя ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ
public static boolean popupStatus=false;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (savedInstanceState != null){
popupStatus = savedInstanceState.getBoolean("Open");
}
setContentView(R.layout.main);
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putBoolean("Open", DateTimePicker.openPopup);
super.onSaveInstanceState(savedInstanceState);
}
У меня есть DateTimePicker.java
класс, который имеет 1 кнопку и 1 просмотр текста.При нажатии на кнопку мой другой класс Calendar.java
заполняется в PopupWindow, и в этом всплывающем окне отображается мой класс Calendar.java
.Я создал разные макеты моего класса Calendar.java
для портретного и ландшафтного режима.Вот DateTimePicker.java
некоторый фрагмент кода,
public static boolean openPopup = false;
textView = new TextView(this.getContext());
this.addView(textView, layoutParams);
button = new Button(this.getContext());
button.setText("C");
this.addView(button, layoutParams1);
button.setOnClickListener(this);
if(Main.popupStatus){
button.performClick();
}
public void onClick(View v) {
if(Main.popupStatus){
new Handler().postDelayed(new Runnable() {
public void run() {
openCalendar();
}
}, 100);
}
else{
openCalendar();
}
private void openCalendar() {
Calendar calendar = new Calendar(this.getContext());
if(portrait.equals(orientation)){
pw = new PopupWindow(calendarLayout, 245, 284, true);
}
else{
pw = new PopupWindow(calendarLayout, 295, 240, true);
}
pw.setOutsideTouchable(false);
pw.showAtLocation(this, Gravity.NO_GRAVITY, 10, 80);
openPopup = true;
}
public void closeCalendar(){
pw.dismiss();
openPopup = false;
}
Main.XML содержит DateTimePicker
.На самом деле я хотел, чтобы мое всплывающее окно открывалось даже при изменении ориентации во время выполнения, поэтому я сделал это с помощью установки флага openPopup = true;
в методе openCalendar()
, и если оно открывается и ориентация изменяется во время выполнения, этот флагбудет сохранен в методе onSaveInstanceState()
.После изменения ориентации она будет проверена в onCreate()
, и откроется всплывающее окно для соответствующего режима ориентации.Я надеюсь, что вы поняли мою точку зрения.
ПРОБЛЕМА: Первоначально, когда я нажимаю кнопку в режиме Портрета, всплывающее окно появляется для макета портрета.затем, не закрывая всплывающее окно, я меняю ориентацию на альбомную.И после изменения я вижу мое всплывающее окно как неповрежденное и появляется на экране макета ландшафта.До сих пор работает нормально.Но если всплывающее окно открывается в ландшафтном режиме, а затем я меняю ориентацию на портрет, всплывающее окно макета портрета не появляется, и я вижу сообщение FORCE CLOSE: / Пожалуйста, помогите, так как я работаю за ним так долго и не получаюПодсказка.Я был бы очень благодарен всем вам.Спасибо!
PS: Изменение ориентации означает, что я нажимаю Ctrl + F11 и меняю ориентацию эмулятора