2

帖子已被编辑Android应用程序没有正常关闭时,点击返回

我编程的Android应用程序作为一个实践项目学习的目的。我遇到一个问题,当我在访问设置活动并在其中进行更改(复选框选项)后按主活动上的后退按钮时,它会返回设置活动。如果在设置活动中没有进行任何更改,并且我回到主要活动并再次按下,则退出正常。如果我访问任何其他活动,然后返回主页,请再次按下,一键点击即可关闭。

下面您会看到设置活动和主要活动的后退按钮代码。

user_settings_activity.java(设置活动):

// When the back button is pressed, it goes back to the previous screen. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
} 

User_Options.java(主要活动):

// When the back button is clicked, the user is asked if they want to close the app window or not. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
} 

请告诉我,以所需的任何其他代码。

任何帮助解决方案,将不胜感激。

谢谢。

SOLUTION

首先,谢谢大家谁坚持这一问题提供答复和意见。我感谢大家的帮助。现在经过一番修改之后,我终于设法解决了这个问题。代码如下。

设置的活动:

// For the go back button. 
public void go_back_butt(View v){ 
    // Goes to main activity. 
    Intent main_activity = new Intent(getApplicationContext(), User_Options.class); 
    main_activity.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    main_activity.putExtra("EXIT", true); 
    startActivity(main_activity); 

    finish(); 
} 

而且

// When the back button is pressed, it goes back to the previous screen. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    finish(); 
} 

主要活动:

// When the back button is clicked, the user is asked if they want to close the app window or not. 
@Override 
public void onBackPressed() { 
    super.onBackPressed(); 

    if (getIntent().getBooleanExtra("EXIT", false)) { 
     finish(); 
    } 

    android.os.Process.killProcess(android.os.Process.myPid()); 
} 

说明:

如前所述@chichiangho,我需要采取IN-深入了解在栈上。由于我在这方面的知识有限,所以我设法弄清楚,由于某种原因,设置活动并没有像我最初的理论那样正确关闭。所以这让我想知道如何在保留我保存的设置的同时正确处理这个问题。

感谢@kevz和@MFP响应,我能够创建一个解决方案。我实现了一个“返回”按钮(参见代码),并在主要活动上使用了kill过程来确保应用程序“正常退出”。我还将设置活动的意图传递给主要活动以确保完成()过程发生。

谢谢大家谁参与了,并花时间发布你的有用答案,让我在箱子外思考更多,同时学习有关android应用开发的新东西=)。

+1

我读了你的简短版本,我猜你在传递到第二个活动时不会打电话完成 –

+0

@Mohit G:r在BackPress的SettingActivity中启动MainActivity? – kevz

+0

我认为这是我在手机中发现的问题,仅在调试我的应用程序时启动两次 – Androider

回答

1

当您关闭SettingActivity时,请不要执行任何操作。

这里是你的爱好堆栈。

在第一:MainActivity

开始SettingActivity:MainActivity-> SettingActivity

开始MainActivity在onBackPressed():MainActivity-> SettingActivity-> MainActivity

然后完成SettingActivity:MainActivity-> MainActivity

看,有两个MainActivities,我想这就是为什么你的MainActivity会看起来像重启。

+0

事件你在调用onBackPressed()时什么也不做,活动将自行完成并返回到之前的活动 – chichiangho

+0

这很奇妙,但是我遇到了一个新问题。现在,当我在设置中更改某些内容后单击后退按钮。我去主要活动。但是,当我点击主要活动的后退按钮时,即使我没有对它进行编程,它也会返回到设置活动。 –

+0

@Mohit G:使用startActivityForResults()为结果启动ur设置活动。然后,如果你做任何改变,你可以简单地setResult()和finish()settingActivity。 – kevz

4

重写onBackPressed功能的活动

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    // Call finish() function here 
    finish(); 
} 
+0

感谢您的回复。我试过你的解决方案,但它没有产生任何改进。结果是一样的。 –

+0

删除此行:Intent main_activity = new Intent(user_settings_activity.this,User_Options.class); startActivity(main_activity); | from user_settings_activity.java –

+0

我已经这么做了。重新加载主要活动的问题已消失。但现在有了一个新的。当我在设置活动中更改某些内容并返回主要活动时。点击返回退出,返回到设置活动,而不是退出应用程序。 –

2

中您可以使用下面的代码从应用程序退出。

@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
    ActivityCompat.finishAffinity(MainActivity.this); 
    android.os.Process.killProcess(android.os.Process.myPid()); 
} 
+0

感谢您的回复。我尝试了上面的代码,但它不起作用,因为问题仍然存在。 –

+0

感谢您的帮助,我制定了一个解决方案。检查出来,如果你有兴趣,我已经把它发布在我原来的帖子里了)。 –

1

使用这个..

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    { 
     finish(); 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

感谢您的帮助,我制定了一个解决方案。检查出来,如果你有兴趣,我已经把它发布在我原来的帖子里了)。 –

1

从MainActivity按钮启动SettingActivity卡嗒

btnSecond.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, SettingActivity.class)); 
     } 
}); 

无需启动SettingActivity后完成()MainActvity。

不需要在SettingActivity中重写onKeyDown()或onBackPressed()。

无论你在设置活动时如何改变wt值,都不会覆盖上述任何方法,它可以正常工作。

+0

感谢您的回复。我试过了,但没有做任何改变。我遵循@chichiangho建议并解决了最初的问题。但是,如果我在设置活动中改变了任何内容并返回,新的弹出窗口就会弹出。如果我再按退出,它会让我回到设置活动。主要活动的代码与上面发布的代码相同。 –

+0

@Mohit G:查看我编辑的答案 – kevz

+0

感谢您的回复和所有的帮助。我必须在白天明天尝试这个,因为现在对我来说已经很晚了。我会让你知道它是怎么回事。再次感谢=)。 –

相关问题