Вот моя ГЛАВНАЯ ДЕЯТЕЛЬНОСТЬ
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:/Пожалуйста, помогите, так как я так долго работаю над этим и не получаю зацепка. Я был бы очень благодарен вам всем. Спасибо!
P.S.: Изменение ориентации означает, что я нажимаю ctrl+F11 и меняю ориентацию эмулятора.