5

我需要處理Android應用程序中的方向更改。爲此目的,我決定使用OrientationEventListener便利課。但他的回調方法有一些奇怪的行爲。處理方向變化時的問題

我的應用程序開始在人像模式,然後最終切換到lanscape之一。我有一些自定義代碼在回調onOrientationChanged方法中執行,它提供了一些額外的UI處理邏輯 - 它有幾個調用findViewById。 奇怪的是,當從橫向切換回肖像模式onOrientationChanged回調被稱爲兩次,甚至更糟 - 第二個電話正在處理不好Context - findViewById方法開始返回null。這些電話是從MainThread

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    listener = new OrientationListener(); 
} 

    @Override 
protected void onResume() {  
    super.onResume(); 
    // enabling listening 
    listener.enable(); 
} 
    @Override 
protected void onPause() { 
    super.onPause(); 
    // disabling listening 
    listener.disable(); 
} 

權利而作出我複製與虛擬Activity相同的行爲,而不只是一個帶有定向hadling涉及任何邏輯。 我按按Ctrl + F11 出了什麼問題發起朝向切換從Android 2.2模擬器?

UPD: 內部類實現OrientationEventListener

private class OrientationListener extends OrientationEventListener { 
    public OrientationL() { 
     super(getBaseContext()); 
    } 

    @Override 
    public void onOrientationChanged(int orientation) { 

     toString(); 

    } 
} 

}

+1

請發表您的onOrientationChanged代碼太 – 2010-06-07 08:58:02

+1

你有一個真正的手機上測試時試過這種?我遇到了一些方向變化的問題,只有在模擬器上測試時纔會發生。它與模擬器假定屏幕方向改變有關 - 我也有一個問題,它重新創建應用程序兩次。 – 2010-06-07 10:56:00

+0

可惜的是我沒有獲得真正的手機現在 – nixau 2010-06-07 11:07:00

回答

5

這是僅在模擬器中記錄的錯誤。真正的設備不會表現出這種雙生命週期事件行爲。我前段時間遇到了同樣的問題,並且它在真實設備上消失。

,我建議只檢測一個方向取向的變化,直到你得到你的手物理的手機上,如果你能忽略的問題。否則,您可以通過保留一個靜態布爾值來指示您已經通過第一組生命週期調用來「跳過」第二組生命週期調用。

更多信息,請參見this issue report

+0

相比對摩托羅拉XOOM一些麻煩是更好的解決方案的onCreate調用兩次連續過 http://stackoverflow.com/posts/3922257 – RzR 2012-01-05 11:06:16

3

您是否嘗試過使用onConfigurationChanged?

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
if(newConfig.equals(Configuration.ORIENTATION_LANDSCAPE)… 
+0

我使用'findViewById'方法得到同樣的問題。這很奇怪,但似乎'.xml'文件中指定的聲明式佈局還沒有渲染。 – nixau 2010-06-07 10:17:03

+0

反正onConfigurationChanged似乎在與OrientationEventListener回調訂閱 – nixau 2010-06-08 09:00:15

1

添加安卓清單文件configChanges =「方向」在活動標籤一樣

<activity android:label="@string/app_name" android:configChanges="orientation" android:name=".com.androidpeople">