2012-08-04 30 views
6

我知道這個問題已經被問過很多次,但任何解決方案的不工作,我的情況有點不同。轉到主屏幕,而不是以前的活動

我有一個Activity它可以有很多不同的活動來調用。但我希望當用戶按下後退按鈕,而不是以前的活動,應用程序應該轉到主屏幕。使用StartActivityFromResult()但然後我會在每一個調用活動使用它

的一種方式。

+0

你可以保持按鈕,當按下按鈕時,它會自動轉到hme頁面... Intent i = new Intent(AccountActivity.this,ContactsActivity.class); startActivity(ⅰ); – shassss 2012-08-04 09:47:02

+1

「但是我希望當用戶按下後退按鈕,而不是以前的活動時,應用程序應該轉到主屏幕」 - 因爲*用戶*不太可能需要這個,爲什麼您認爲這是合理的行爲? – CommonsWare 2012-08-04 12:04:14

+0

我提到的活動是音樂播放器的播放器屏幕。我希望用戶從播放列表中選擇一首歌曲,然後應用將轉到PlayerActivty。但是當後退按鈕從播放器按下時,流程將轉到主屏幕或其他用戶之前打開的其他應用程序。希望我已經解釋了這個問題。 – reiley 2012-08-04 14:02:44

回答

23

您可以覆蓋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); 

} 
+0

謝謝..這工作..但是,如果例如,我在應用程序之前正在使用消息應用程序,並且我記錄了按下的主鍵,然後打開了我的應用現在,如果我按回鍵,我怎樣才能返回到以前打開的應用程序(例如在此消息傳遞)? – reiley 2012-08-04 15:29:06

+0

如果您知道該郵件應用程序的活動名稱和包,則可以使用onBackpressed方法調用該活動。 – android 2012-08-06 04:22:24

+0

我在其他地方看到過這個不推薦。 – Enigma 2012-08-29 04:40:04

0

只需發送一個Intent直接回家。這可以通過設置該意圖的動作和類別來完成。

檢查意向獲取細節。

-3
 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); 
       } 
      }); 
+0

這是不正確的。沒有您可以調用的HomeActivity類。請參閱我的帖子或@android帖子。 – JoxTraex 2012-08-04 10:32:18

2

您也可以簡單地在活動上調用finish()方法。

+0

我不會推薦使用這種方法,因爲1.大概操作系統會調用會影響你的後臺堆棧邏輯順序的活動的onDestroy回調。 2.如果您的活動使用'startActivityForResult'方法由另一個活動調用,它將調用調用活動'onActivityResult'回調。 – Eido95 2017-06-26 19:18:38

1

並加入到這個問題,如果你不想來支持你的行爲,你按下返回鍵則只是一個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(); 
} 
0

,如果你有活性的和你做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(); 
    } 
} 
相關問題