12

我知道这个问题以前被问过很多次,但是任何解决方案都不起作用,我的情况有点不同。

我有一个Activity可以从许多不同的活动中调用的。但我希望当用户按下后退按钮时,应用程序应该进入主屏幕,而不是之前的活动。

一种使用方法,StartActivityFromResult()但我必须在每个调用活动中使用它。

4

7 回答 7

36

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);
}
于 2012-08-04T09:59:10.253 回答
4

如果您不想在按下后退按钮的位置支持您的活动,则添加到这个问题,然后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();
}
于 2013-02-15T10:36:31.127 回答
3

您也可以简单地调用finish()活动上的方法。

于 2012-08-04T10:10:42.147 回答
1

只需返回主页活动即可添加此代码

@Override
public void onBackPressed()
{

    Intent intent=new Intent(currentactivity.this,Mainactivity.class);
    startActivity(intent);
    finish();

}// on back Pressed first add activity where you stand and add activity where you go
于 2018-04-11T10:01:55.527 回答
0

只需将 Intent 直接发送回家即可。这可以通过设置该意图的操作和类别来完成。

有关详细信息,请查看 Intent 上的文档。

于 2012-08-04T09:49:38.693 回答
-1

如果您有一个 Activity A 并制作 3 个片段,例如 B、C 和Home_Fragment ,这很简单。现在,如果您在片段 B 或 C 中并按下返回按钮,您希望每次都在Home_Fragment上移动。
然后你必须重写onBackPressed()Activity A 中的方法,并且当你跳转到任何片段时,然后给出一个特定的TAG 或 name,你就会在 Activity A 中识别那个片段。

我举的例子你很容易理解:

从活动 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();
    }
}
于 2015-05-04T07:13:34.070 回答
-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);
                }
            });
于 2012-08-04T09:57:06.760 回答