2014-02-09 5 views
2

Я создаю простое приложение таймера, в котором я использую андроидный хронометр для отслеживания пройденного времени. но когда я запускаю хронометр и меняю ориентацию на пейзаж, хронометр сбрасывается и снова показывает 00:00. Я хочу, чтобы он сохранил свою ценность. макеты для portrait и landscape отличаютсяКак сохранить значение андроидного хронометра с изменением ориентации

portrait--> Layout папку

landscape->layout_land папку

<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

@ChrisStratton я не согласен. Большинство ответов на вопрос защищают использование 'android: configChanges =" orientation "', что, безусловно, является неправильным ответом. Адиль, вы должны прочитать о 'SharePreferences'. Сохраните текущее значение в 'onPause()' и восстановите его в 'onResume()'. – Simon

+0

@Simon: я получил вашу благодарность :) –

+0

@Simon - пожалуйста, перечитайте основной ответ связанного вопроса, который посвящен сохранению состояния. Лично, однако, я не уверен, что игнорирование изменений ориентации - неправильный ответ. Телефоны часто реагируют на случайные наклоны способами, которые не повышают удобство использования вообще. Это действительно требует выяснить, что лучше всего в данном случае использования. –

ответ

1

Вот что док сказал:

Recreating an Activity

Внимание! Ваша деятельность будет уничтожена и воссоздана каждый раз, когда пользователь поворачивает экран. Когда экран меняет ориентацию, система уничтожает и воссоздает активность переднего плана, потому что конфигурация экрана изменилась, и для вашей активности может потребоваться загрузить альтернативные ресурсы (например, макет).

Если вам необходимо Save activity's state перед изменением ориентации, вы должны переопределить onSaveInstanceState(). Этот метод поможет вам сохранить все значения, которые вы хотите вернуть после изменения ориентации. Затем восстановите их в методе onCreate().

Вот Exemple:

String myVar; 

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

Теперь получить его при создании деятельности:

@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"); 
    } 
    /* 
     ... 
    */ 
}