首页 文章

如何关闭活动并返回到android中的先前活动

提问于
浏览
115

我有一个主要活动,当我点击一个按钮,启动一个新活动时,我使用以下代码来执行此操作:

Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);

上面的代码是从主要活动运行的 .

现在,在我的主要活动调用的新活动中,我有一个后退按钮 . 当我点击这个后退按钮时,我希望我的新活动关闭,它必须回到原来的主要活动 .

我试过调用 super.finish()finish() (来自新活动),但这会关闭我的整个应用程序(包括我的主要活动) .

如何关闭当前关注的活动,然后返回主活动?

EDITED

我的手机的后退按钮也关闭了我的整个应用程序的事实,让我认为我已经错误地启动了第二个活动?


好的,我一直在寻找,

我创建了一个设置活动,它使用相同的清单代码和相同的代码来启动活动 .

对于按下后退按钮时的设置,它将返回主活动 .

通过上面在主要问题中提到的活动,它只是退出我的整个应用程序 .

所以问题似乎不是完成活动的代码,而是活动本身 .

16 回答

  • 2

    如果你使用片段你应该使用

    getActivity().onBackPressed();
    

    如果您使用单一活动,您可以使用

    finish();
    
  • 4

    我认为你在启动 SettingsActivity 之前在 MainActivity 中调用 finish() 方法 .

    您描述的方案将以下列两种方式发生:

    无论是

    您已在 AndroidManifest.xml 内为 MainActivity 设置 android:noHistory = "true" ,这会在按后退键时自动导致 MainActivityfinish .

    要么

    在切换到'SettingsActivity'之前,您已经在 MainActivity 中调用了 finish() ,这会导致它被杀死 . 当您按下后退按钮时,由于没有其他活动预设在堆栈中弹出,它会返回主屏幕 .

  • 1

    只需在您所在的活动中调用finish()即可返回上一个活动 . 注意在finish()调用之后的任何代码都会运行 - 你可以在调用finish()之后再做一个返回来修复它 .

    如果要将结果返回到活动1,那么在启动活动2时,您需要:

    startActivityForResults(myIntent, MY_REQUEST_CODE);
    

    在被调用的活动中,您可以从onCreate()参数获取Intent或使用它

    getIntent();
    

    要将结果设置为活动1,然后在活动2中设置

    setResult(Activity.RESULT_OK, MyIntentToReturn);
    

    如果您无意返回,那就说吧

    setResult(Activity.RESULT_OK);
    

    如果活动结果不佳,您可以使用Activity.RESULT_CANCELED(默认情况下使用) . 然后在活动一中你做

    onActivityResult(int requestCode, int resultCode, Intent data) {
        // Handle the logic for the requestCode, resultCode and data returned...
    }
    

    要完成活动,请使用与上述finish()相同的方法,并已设置结果 .

  • 13

    尝试此代码而不是 finish

    onBackPressed();

  • 6

    你这太难了 . 如果我理解您正在尝试正确执行的操作,内置的'back'按钮和Android本身将为您完成所有工作:http://developer.android.com/guide/components/tasks-and-back-stack.html

    此外,实现自定义"back"按钮违反了Core App质量指南UX-N1:http://developer.android.com/distribute/googleplay/quality/core.html

  • 0
    @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
    
            if ( id == android.R.id.home ) {
                finish();
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    

    试试这个它在 toolbar back button 上同时适用于 hardware back button .

  • 5

    完成关闭整个应用程序,这是我讨厌在Android开发中没有完成的东西很好,但他们没有跟上他们有的语法

    startActivity(intent)
    

    为什么不

    closeActivity(意图)?

  • 0
    { getApplicationContext.finish();   }
    

    试试这个方法..

  • 0

    我不知道这是否有用,但我遇到了同样的问题,我找到了一个非常简单的方法,只有一个全局布尔变量和onResume()动作 . 在我的情况下,我的活动C如果点击一个特定的按钮它应该触发活动B的完成()!

    Activity_A - > Activity_B - > Activity_C

    Activity_A(通常打开Activity_B)

    Activity_B(在某些按钮上单击打开Activity_C):

    // Global:
    boolean its_detail = false;
    // -------
    SharedPreferences prefs =  getApplicationContext().getSharedPreferences("sharedpreferences", 0);
    boolean v = prefs.getBoolean("select_client", false);
    
    its_detail = v;
    
    startActivity(C);
    
    @Override
    public void onResume(){
         super.onResume();
         if(its_detail == true){
            finish();
         }
    }
    

    因此,每当我单击活动C上的按钮时,它将执行活动B的“onResume()”功能并返回活动A.

  • 1

    我们遇到了非常类似的情况 .

    活动1(开场) - >活动2(预览) - >活动3(详情)

    错误的“背面按下”响应

    • 设备反压活动3也将关闭活动2 .

    我检查了上面发布的所有答案,但没有一个有效 . 审核了活动2和活动3之间转换的Java语法是正确的 .

    从编码调出第三方应用程序新鲜 . 通过活动 . 我们决定调查配置角度 - 最终使我们能够确定问题的根本原因 .

    Scope :活动2的配置(来电者) .

    Root Cause

    android:launchMode="singleInstance"
    

    Solution

    android:launchMode="singleTask"
    

    显然在这个"on back press"问题上,singleInstance在一个实例中使用调用Activity来调用被调用的活动,而singleTask将允许被调用的具有自己的身份的活动,这些活动足以使预期的后退功能按预期工作 .

  • 4
    Button edit = (Button) view.findViewById(R.id.yourButton);
    edit.setOnClickListener(new OnClickListener() {
    
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(this, YourMainActivity.class);
            startActivity(intent);
            finish();
        }
    });
    
  • 4

    这将关闭整个应用程序:

    this.finish();
    
  • 1

    我相信你的第二个活动可能与您作为儿童活动的主要活动无关 . 检查 AndroidManifest.xml 文件,查看子活动的 <activity> 条目是否包含 android:parentActivityName 属性 . 它应该看起来像这样:

    <?xml ...?>
    ...
    <activity
        android:name=".MainActivity"
        ...>
    </activity>
    <activity
        android:name=".ChildActivity"
        android:parentActivityName=".MainActivity"
        ...>
    </activity>
    ...
    
  • 169

    你可能正在调用finish();在单击按钮事件中,所以主要活动在您单击按钮后立即关闭,当您从下一个活动返回时,应用程序将退出,因为主要活动已关闭且没有活动活动 .

  • 52

    当您单击按钮时,可以调用它:

    super.onBackPressed();
    
  • 0

    只是不要在 MainActivity 上调用 finish() ,这样就不需要在_391131中覆盖你的 onBackPressed() ,除非你在该函数中做其他事情 . 如果您觉得这个后退按钮的"need",那么您只需在 SecondActivity 上调用 finish() ,只要您没有在其上调用 finish() ,就会将您带到 MainActivity

相关问题