2011-04-03 63 views
8

在我正在編寫的應用程序中,有一部分允許您更改窗簾設置。問題在於,該設置在重新創建活動之前不會生效。有沒有辦法告訴應用程序重新啓動使用onResume()方法(希望允許它保存在onSaveInstanceState())的一切?如何在Android中重新啓動活動?

+0

你不能只是開始另一個實例,然後打電話給原來的完成? – Blundell 2011-04-03 15:22:34

+0

@Blundell - 訣竅是調用'finish()'_before_開始新的實例。 – 2011-04-03 15:31:12

+0

基本上,我想要做的就是能夠從onRestart()方法中調用onCreate()方法。我將如何做,以便onSaveInstanceState()將保存所有內容。因爲有了這個,所有的東西都被重置了,因爲它是一個全新的活動? – Ephraim 2011-04-03 16:21:24

回答

31

這已經posted before

Intent intent = getIntent(); 
finish(); 
startActivity(intent); 

由於API級別11,你也可以叫一個活動的recreate()方法。這不僅更清潔,因爲它更少代碼,它避免瞭如果您的活動是由隱式意圖啓動可能會出現的問題。

+0

基本上,我想要做的就是能夠調用onCreate( )方法從onRestart()方法。我將如何做,以便onSaveInstanceState()將保存所有內容。因爲有了這個,所有的東西都被重置了,因爲它是一個全新的活動? – Ephraim 2011-04-03 16:19:46

+1

程序工作的方式是,你鍵入一個單詞,並在屏幕上,它會給你一個對應於該單詞的幕簾編號。如果您要更改設置,則與該單詞對應的編號將會更改。問題是,設置不會生效,直到活動重新啓動(如果您要更改方向,它將允許設置生效,但它不會以其他方式執行)我想要的是隻要程序啓動onRestart()方法就能夠做到這一點。 (我想讓EditText中的文本保持不變,就像onSaveInstanceState())。 – Ephraim 2011-04-04 03:12:29

1

也許你可以像已經演示的那樣重新啓動活動,但傳入一些意圖的附加項以在重新啓動時將字符串發回。

Intent intent = getIntent(); 
intent.putExtra(STRINGTOSAVE, "Save this string"); 
finish(); 
startActivity(intent); 

,並在您的onCreate當然你會想檢索字符串

Intent intent = getIntent(); 
String STRINGTOSAVE = intent.getStringExtra(ActivityName.STRINGTOSAVE); 

,然後使用檢索到的字符串重新申請文本字段,你需要任何其他操作。