2017-09-25 23 views
-2

我有一個包含一個抽屜一個主要活動,然後我有一個在它上面打開,他們也有抽屜菜單(它們繼承的主要活動)如何在關閉android中的所有其他活動時保持活動狀態?

public class OBDActivity extends MainActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE); 
    View contentView = inflater.inflate(R.layout.activity_setting, null, false); 
    mDrawer.addView(contentView, 0); 
    getSupportActionBar().setTitle(R.string.OBDParams); 
} 
... 
} 

我想保持主要活動活着等活動並在新的活動正在打開時殺死所有其他活動?

我已經試過這個,但它只是殺死與正在打開的活動相同的舊活動。

Intent intent=new Intent(this, MessagesActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
startActivity(intent); 

事實上,我想開始新的活動,並完成當前的活動,無論是其相同的活動或不同的類型。

+0

你是否認爲如果活動A(MainActivity) - > B - > C - > D - > E比B,C,D會被破壞?並在我點擊後按鈕將重定向到A? –

+0

你叫'finish()'嗎? –

+0

@ ND1010_是的,正好。 –

回答

0

唯一的辦法我能做到這一點是處理由我自己收舊activity所以我一直在activity的參考,這是開當一個新的打開時關閉它。

我在Main Activity創建了一個名爲oldActivity變量,我把它在每一個其他活動onCreate方法:

openedActivity = this; 

然後,每當另一activity打算從抽屜菜單中打開我剛剛完成舊:

oldActivity.finish(); 
+0

不是一個好的解決方案。保持對活動的引用可防止垃圾收集器清除它們。請看我的答案。 –

0

嘗試這個

Intent intent = new Intent(ActivityC.this, MainActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
finish(); 

更多關於intent

0

不,你不能這樣使用的活動共同標誌或任何function.Not當然我所知,做

但是有一個解決方法,您可以清除所有從backstack開始的活動,然後重新打開第一個活動。

試試這個:

Intent intents = new Intent(CurrentActivity.this, FirstActivity.class); 
intents.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(intent); 
finish(); 
0

您需要使用您的MainActivity爲 「調度員」。當你想打開MessagesActivity,這樣做:

Intent intent=new Intent(this, MainActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
// Add an extra that specifies the name of the class that should be started by MainActivity 
intent.putExtra("startActivity", MessagesActivity.class.getName()); 
startActivity(intent); 

這將清除活動堆棧一路背到現有的MainActivity實例。

現在,在MainActivity,覆蓋onNewIntent()並採取調度所需Activity的護理:

@Override 
protected void onNewIntent(Intent intent) { 
    // Check if we should launch another Activity 
    if (intent.hasExtra("startActivity") { 
     // Start the desired Activity 
     String activityName = intent.getStringExtra("startActivity"); 
     Intent dispatchIntent = new Intent(this, Class.forName(activityName)); 
     startActivity(dispatchIntent); 
    } 
} 

這將啓動所需的Activity上的MainActivity頂部。

相關問題