2012-08-22 40 views
0

我正在檢查它是如何在實際設備上調試應用程序的。以下代碼根據重複按下的次數更改按鈕的文本。當屏幕方向改變時,整數值會丟失?

它完美增加,但正如我傾斜設備,並將其切換到風景,按鈕改變了它的文本到初始狀態。我再次按下並再次傾斜,數值再次被重置。

背景是怎麼回事?以及如何阻止它?

b.setOnClickListener(new OnClickListener() { 
    int i = 1; 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     // Toast.makeText(MainActivity.this, "Pressed ", Toast.LENGTH_SHORT).show(); 
     b.setText("press "+ i); 
     i++; 
    } 
}); 

回答

3

當你傾斜你的活動被破壞的設備和OnCreate中再次調用。 重新啓動時,您必須保留想要返回的值。 有幾種方法可以做到這一點。 在快捷方式中,您可以在清單文件Activity中添加一個標誌,即android:configchanges =「orientation」。

<activity 
      android:name=".Splash" 
      android:configChanges="orientation" 
      android:screenOrientation="portrait" 
      android:theme="@android:style/Theme.NoTitleBar" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

Aur將您的值保存在onPause或onBundleSaveinstance生命週期回調方法中。

+0

是的,這就是我一直在尋找。榮譽! –

1

你需要在AndroidManifest.xml分配android:screenOrientation="landscape",看看下面的代碼,

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="landscape" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
2

是的,因爲你的活動將重新啓動。您需要將方向更改的數據保存爲保存的即時,否則您需要限制活動中的方向更改。

0

你的活動重新啓動(的onCreate被調用)每次活動改變方向時,要避免這一點,你可以在你的Android androidmanifest設置:configChanges =「方向」的活動。

2

您需要使用的onSaveInstanceState保存你的數據,因爲數據丟失的方向變化時。谷歌onSaveInstanceState,如果你仍然有問題問。

1

活動的被破壞,當屏幕方向改變時重新創建。

您可以將其鎖定到一個方向。

保存使用onSaveInstanceState您的應用程序的狀態,那麼在它的onCreate恢復或onRestoreInstanceState

+0

這解釋了大局。謝謝。 –

相關問題