我知道這個問題已經被問過很多次,但任何解決方案的不工作,我的情況有點不同。轉到主屏幕,而不是以前的活動
我有一個Activity
它可以有很多不同的活動來調用。但我希望當用戶按下後退按鈕,而不是以前的活動,應用程序應該轉到主屏幕。使用StartActivityFromResult()
但然後我會在每一個調用活動使用它
的一種方式。
我知道這個問題已經被問過很多次,但任何解決方案的不工作,我的情況有點不同。轉到主屏幕,而不是以前的活動
我有一個Activity
它可以有很多不同的活動來調用。但我希望當用戶按下後退按鈕,而不是以前的活動,應用程序應該轉到主屏幕。使用StartActivityFromResult()
但然後我會在每一個調用活動使用它
的一種方式。
您可以覆蓋onBackPressed方法,如下所示。它應該工作。
public void onBackPressed() {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
}
只需發送一個Intent直接回家。這可以通過設置該意圖的動作和類別來完成。
檢查意向獲取細節。
Button btn = (Button) findViewById(R.id.button2);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v)
{
Intent i = new Intent(AccountActivity.this, HomeActivity.class);
startActivity(i);
}
});
這是不正確的。沒有您可以調用的HomeActivity類。請參閱我的帖子或@android帖子。 – JoxTraex 2012-08-04 10:32:18
您也可以簡單地在活動上調用finish()
方法。
我不會推薦使用這種方法,因爲1.大概操作系統會調用會影響你的後臺堆棧邏輯順序的活動的onDestroy回調。 2.如果您的活動使用'startActivityForResult'方法由另一個活動調用,它將調用調用活動'onActivityResult'回調。 – Eido95 2017-06-26 19:18:38
並加入到這個問題,如果你不想來支持你的行爲,你按下返回鍵則只是一個finish()
下面的代碼。
public void onBackPressed() {
Intent mainActivity = new Intent(Intent.ACTION_MAIN);
mainActivity.addCategory(Intent.CATEGORY_HOME);
mainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mainActivity);
finish();
}
,如果你有活性的和你做3個片段像B,C和Home_Fragment這僅僅是簡單的。現在,如果您在片段B或C中並按回按鈕,則您每次都要在Home_Fragment上移動。
然後,你必須只覆蓋活動A的onBackPressed()
方法以及當你跳到任何片段,然後給出一個具體的標籤或名稱,你會認識到,片段活動A.
我給的例如,你可以很容易地理解:
從一個活動移動到C片段
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new C_fragment(),"xyz").commit();
}
或者如果你是從B片段移動到C片段,並在背部按,你要來的片段d,做象下面這樣:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getActivity().getSupportFragmentManager().beginTransaction()
.add(R.id.container, new C_frament(), "xyz").commit();
((ActionBarActivity) getActivity()).getSupportActionBar().setTitle("Fragment C");
}
});
現在你必須只覆蓋onBackPressed()方法主要活動如下:
@Override
public void onBackPressed() {
FragmentManager fragmentManager =getSupportFragmentManager();
if (((C_fragment) getSupportFragmentManager().findFragmentByTag("xyz")) != null
&& ((C_fragment) getSupportFragmentManager().findFragmentByTag("xyz")).isVisible()) {
Fragment fragment = new Home_Fragment();
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
getSupportActionBar().setTitle("Home fragment ");
} else {
super.onBackPressed();
}
}
你可以保持按鈕,當按下按鈕時,它會自動轉到hme頁面... Intent i = new Intent(AccountActivity.this,ContactsActivity.class); startActivity(ⅰ); – shassss 2012-08-04 09:47:02
「但是我希望當用戶按下後退按鈕,而不是以前的活動時,應用程序應該轉到主屏幕」 - 因爲*用戶*不太可能需要這個,爲什麼您認爲這是合理的行爲? – CommonsWare 2012-08-04 12:04:14
我提到的活動是音樂播放器的播放器屏幕。我希望用戶從播放列表中選擇一首歌曲,然後應用將轉到PlayerActivty。但是當後退按鈕從播放器按下時,流程將轉到主屏幕或其他用戶之前打開的其他應用程序。希望我已經解釋了這個問題。 – reiley 2012-08-04 14:02:44