How to contain value of android chronometer with change in orientation [duplicate]

六月ゝ 毕业季﹏ 提交于 2019-12-11 00:10:51

问题


I am building a simple timer app in which I am using android chronometer to track time passed. but when I start chronometer and change orientation to landscape the chronometer resets and and show 00:00 again. I want it to retain its value. layouts for portrait and landscape are different

portrait--> Layout folder

landscape->layout_land folder

<Chronometer 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"
    android:id="@+id/chronometer1"
    android:layout_above="@+id/button2"
    android:textStyle="bold"
    android:textColor="@color/Indigo"
    android:text="Chronometer"
    android:layout_toLeftOf="@+id/save_btn"
    android:typeface="serif"
    android:textSize="40dp"/>

回答1:


Here is what the doc said :

Recreating an Activity

Caution: Your activity will be destroyed and recreated each time the user rotates the screen. When the screen changes orientation, the system destroys and recreates the foreground activity because the screen configuration has changed and your activity might need to load alternative resources (such as the layout).

If you need to Save activity's state before changing orientation, you have to override onSaveInstanceState(). This method will help you save all the values you want to get back after orientation changes. Then restore them in onCreate() method.

Here is an exemple :

String myVar;

/* 
     ...
*/
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save myVar's value in saveInstanceState bundle
    savedInstanceState.putString("myVar", myVar);
    super.onSaveInstanceState(savedInstanceState);
}

Now retrieve it when creating the activity :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    // savedInstanceState is the bundle in which we stored myVar in onSaveInstanceState() method above
    // savedInstanceState == null means that activity is being created a first time
    if (savedInstanceState == null) {
        // some code here
        myVar = "first value";
    } else {  // savedInstance != null means that activity is being recreated and onSaveInstanceState() has already been called.
        myVar = savedInstanceState.getString("myVar");
    }
    /*
       ...
    */
}


来源:https://stackoverflow.com/questions/21660965/how-to-contain-value-of-android-chronometer-with-change-in-orientation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!