這裏是我的主要活動在運行時將方向改爲肖像時,強制關閉Android Popupwindow,爲什麼?
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個TextView的。點擊按鈕,我的另一個類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
。 其實我想讓我的彈出式窗口即使在運行時改變方向時也打開,所以我通過在openCalendar()
方法中設置標誌openPopup = true;
並且如果打開並且在運行時改變方向,該標誌將被保存在onSaveInstanceState()
方法。方向改變後,將在onCreate()
中進行檢查,彈出窗口將打開相應的方向模式。我希望你明白我的觀點。
問題:最初當我在縱向模式中點擊按鈕時,彈出窗口彈出縱向佈局。然後在不關閉彈出窗口的情況下,將方向改爲橫向。更改後,我可以看到我的彈出窗口完好無損,並出現在景觀佈局的屏幕上。直到現在它工作正常。但是,如果彈出式窗口在橫向模式下打開,然後我改變方向爲縱向,縱向佈局的彈出窗口沒有出現,我看到了FORCE CLOSE消息:/請幫助,因爲我在它後面工作了很長時間,線索。我會非常感謝大家。謝謝!
PS:改變方向意味着我按CTRL + F11和模擬器
你不需要使用handler.postDelayed打開一個彈出窗口,因爲它與onClick事件相關聯。只有當您在活動加載時自動顯示它時才需要此選項。因此,在您的onClick中,您可以簡單地調用** openCalendar()** – waqaslam 2012-03-04 11:22:24
不,它不是一個糟糕的編程。使用它,如果它爲你工作正常:) – waqaslam 2012-03-04 16:18:17