2013-03-24 3 views
0

Скажите, если я хочу, чтобы CountDownTimer обновил некоторые элементы пользовательского интерфейса по завершении, но есть изменение конфигурации в середине обратного отсчета, заставляя эту активность воссоздавать ,Как создать CountDownTimer, который сохраняется после изменения конфигурации

public class MyActivity extends Activity { 

    private TextView textView; 

    .... 

    public void onButtonClicked(View view) 
    { 
     // start CountDownTimer 
     new CountDownTimer(10000, 10000) { 
      public void onTick(long millisUntilFinished) { 
       // do nothing 
      } 
      public void onFinish() { 
       textView.setText("Hello World!"); 
      } 
     }.start(); 
    } 

} 

Я считаю, что когда CountDownTimer заканчивается, это установить TextView в деятельности только что уничтожили, но не воссозданный один

ответ

0

я реализовал pausable CountDownTimer и приостановить/возобновить его, когда OnPause()/onResume() вызывается, и ссылаться на него в виде фрагмента с setRetainInstance (правда). Теперь он может продолжать работу после поворота экрана или изменения конфигурации.

1

http://developer.android.com/guide/topics/resources/runtime-changes.html

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
super.onSaveInstanceState(savedInstanceState); 
// Save UI state changes to the savedInstanceState. 
// This bundle will be passed to onCreate if the process is 
// killed and restarted. 
savedInstanceState.putString("timer",1223); 

// etc. 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
super.onRestoreInstanceState(savedInstanceState); 
// Restore UI state from the savedInstanceState. 
// This bundle has also been passed to onCreate. 
time = savedInstanceState.getString("time"); 
} 

Когда у вас есть большие наборы данных, такие как данные из базы данных или arraylist.

@Override 
public Object onRetainNonConfigurationInstance() { 
final MyDataObject data = collectMyLoadedData(); 
return data; 
} 

В OnCreate

final MyDataObject data = (MyDataObject) getLastNonConfigurationInstance(); 
if (data == null) { 
    data = loadMyData(); 
}