2013-10-22 28 views
5

我試圖在使用Intent附加組件的Activity實例之間傳遞一小段文本。即使在更新時,意向附加組件仍然保持不變

無論何時使用後退按鈕或操作欄中的導航在他們之間導航時,這似乎都能正常工作。但是,如果我訪問主屏幕然後重新啓動應用程序,傳遞的附加內容將被忽略;第二個Activity似乎使用舊的Intent,而不是新的。

相關的代碼:

源活動

public class ActivityA extends Activity { 
    protected void goToResults(String results) { 
     Intent intent = new Intent(this, ActivityB.class); 
     intent.putExtra(Intent.EXTRA_TEXT, results); 
     startActivity(intent); 
    } 
} 

目的地活動

public class ActivityB extends Activity { 
    @Override 
    public void onResume() { 
     super.onResume(); 
     Bundle extras = getIntent().getExtras(); 
     String results = extras.getString(Intent.EXTRA_TEXT); 
     // etc 
    } 
} 

我已經嘗試了一些不同的東西,包括:

intent.setAction("action-" + UNIQUE_ID); 

(因爲據我所知,Intent情況下不會被額外的內容相比)

PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

(我不需要PendingIntent,但認爲這可能迫使Intent更新)

任何建議如何強制Intent每次從ActivityA - >ActivityB轉換時顯示更改的數據,而不管我是使用後退按鈕還是轉向主屏幕?

回答

16

我記得遇到這個問題,一旦我們解決它通過添加Intent.FLAG_ACTIVITY_CLEAR_TOP給您發送的意圖:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

或通過實現以下方法進入活動你的意圖推出:

protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     this.setIntent(intent); 
} 

我不是100%確定什麼修復了一遍,相信它是添加onNewIntent方法。 祝你好運,讓我們知道。

+0

實現'onNewIntent'做到了。謝謝! (PS,任何人都知道爲什麼這是必要的?) – squidpickles

+0

我猜這是因爲活動實際上並未重新啓動,因爲它還活着。對我來說,用最近的一個替換意圖似乎是合乎邏輯的(這導致它最近啓動)。但我想這樣你可以保留原來的意圖,並檢查出新的。 – Lauw

0

爲@Lauw說

protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    this.setIntent(intent); 

}

這行解決了這個問題對我來說

this.setIntent(intent); 
0

而且除去額外的意圖與intent.removeExtra("key")可以幫助更新傳入的新臨時演員。

當我試圖從應用程序B啓動應用程序A時,這種方法有助於我的情況。當應用程序A未打開時,一切正常,但當應用程序A已打開時,我不得不使用removeExtra方法獲取更新。

相關問題