2012-08-04 68 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(); 
    } 
} 
相关问题