我知道这个问题已经被问过很多次,但任何解决方案的不工作,我的情况有点不同。转到主屏幕,而不是以前的活动
我有一个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