2017-04-26 60 views
0

我想從任何活動返回MainActivity。 例如,我的一堆活動: A - B - C - D. A(MainActivity)位於底部,D位於堆棧頂部。當我使用android:launchMode="singleTask"。我可以按照我的預期在任何活動中回到A.從任何帶有標誌的活動返回MainActivity

但是當我使用標誌FLAG_ACTIVITY_NEW_TASK(不launchMode =「singleTask」),這是行不通的預期,它打開一個新的活動。 和堆棧是: 一個 - B - C - d - 一個 不是文件中寫道:

FLAG_ACTIVITY_NEW_TASK
開始在一個新的任務活動。如果某個任務的 已針對您現在開始的活動運行,則該任務將被帶到前臺,並恢復其最後狀態,並且 活動將在onNewIntent()中收到新的意圖。

這產生與「singleTask」launchMode值相同的行爲,在 上一節討論。

任何人都知道原因?謝謝。

+0

看到我的答案你不需要singleTask,newTask等等。只要把這個代碼和它的完成。 –

+0

對不起,這不是答案。因爲我想知道'FLAG_ACTIVITY_NEW_TASK'不能像文檔所說的那樣工作。 –

+0

我想你應該使用廣播接收器爲這個 –

回答

2

我希望這個解決方案解決您的問題:: - 只有將其設置爲Intent

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
+0

感謝您的回答。我嘗試但沒有按照我的預期工作。 –

+0

@RoShanShan嘗試新編輯的答案。 –

+0

非常感謝,我仍然使用'intentToLaunch.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);'。有2個標誌,它就像'FLAG_ACTIVITY_NEW_TASK'一樣工作(但這個標誌不能按預期工作) –

0

試試這個在一個。你可以像這樣添加和刪除堆棧中的活動。

// Add activity 
public static void addActivities(String actName, Activity _activity) { 
    if (Config.screenStack == null) 
     Config.screenStack = new HashMap<String, Activity>(); 
    if (_activity != null) 
     Config.screenStack.put(actName, _activity); 
} 

// Remove Activity 
public static void removeActivity(String key) { 
    if (Config.screenStack != null && Config.screenStack.size() > 0) { 
     Activity _activity = Config.screenStack.get(key); 
     if (_activity != null) { 
      _activity.finish(); 
     } 
    } 
} 

用戶在setContentView添加到堆棧之前添加活動。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addActivities("DemoActivity", DemoActivity.this) 
    setContentView(R.layout.activity_create_feed_post); 
} 

要刪除活動,您只需調用removeActivity()並傳遞添加活動時使用的密鑰。

+0

對不起,但這不是我想要的答案。你的回答是:「如何從android回退堆棧中刪除特定的活動?」但是用你的回答器,使用HashMap存儲堆棧,不能刪除這樣的活動:A-B-C-D-C-D。如果我想刪除堆棧中的C,則不能。因爲youf HashMap不能在Stack中存儲2 C活動 –

+0

您可以將所有活動存儲在此方法中。例如,如果您現在從ABCDEF轉到F,您想要轉到活動A,然後onBackPress,您只需調用removeActivity(「Your E activity」 ),removeActivity(「你的D活動」)到B活動,然後調用finish()當前活動。就這樣你就完成了。 –

+0

不能用上面的代碼。例如:使用堆棧A-B-C-D-C-D時,使用'HashMap'的代碼不能像堆棧A-B-C-D-C-D那樣存儲堆棧2 C活動 –

0

覆蓋onBackpress每個活動的方法:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
+0

我知道'FLAG_ACTIVITY_NEW_TASK'和'Intent.FLAG_ACTIVITY_CLEAR_TASK'它會清除任務中的所有活動並打開新的活動,而不會返回到堆棧中的活動 –

0

查找解決方法:

注意:它將清除所有以前的活動,並將主頁活動

Intent homeActivity = new Intent(context, DJ_HomeActivity.class); 
homeActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP); 
context.startActivity(homeActivity); 
-1

你應該使用下面的代碼來跳轉MainActivity.With intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)下面的意圖標誌清除所有以前的活動。

Intent intent = new Intent(this, DashboardActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(intent); 

注意一件事,你用android:launchMode="singleTask"因此,儘管從一個活動移動到另一個活動中,你必須使用this.finish()方法來完成一個活動。

相關問題