发布已修改
我已将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();
}
请告知我所需的任何其他代码。
任何有助于解决方案的帮助都将受到赞赏。
谢谢。
解
首先,谢谢大家坚持提出回复和评论的问题。我感谢大家的帮助。现在经过一些修补,我终于设法解决了问题。代码如下。
设置活动:
// 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所提到的,我需要深入了解堆栈。由于我对这些事情的了解有限,但我设法弄清楚,由于某种原因,设置活动没有像我最初的理论那样正确关闭。所以这让我想知道如何在保持我保存的设置的同时正确处理这个问题。
感谢@kevz和@MFP回复,我能够创建一个解决方案。我实现了一个“返回”按钮(参见代码)并在主要活动上使用kill进程以确保应用程序“正确退出”。我还将设置活动的意图传递给主要活动,以确保完成finish()过程。
感谢所有参与的人,并花时间发布您的有用回复,这让我开箱即用,并在同一时间了解有关Android app dev的新内容=)。
答案 0 :(得分:4)
覆盖Activity
中的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();
}
答案 1 :(得分:2)
您可以使用以下代码退出应用。
class Threading1
{
static void Main (string[] args)
{
Stopwatch timerMain, timerThreads;
// Main thread
timerMain = Stopwatch.StartNew ();
func1();
func2();
func3();
timerMain.Stop ();
Console.WriteLine ("Time taken for Main thread: " + timerMain.ElapsedMilliseconds);
// Other threads
Thread t1 = new Thread (() => Threading1.func1 ());
Thread t2 = new Thread (() => Threading1.func2 ());
Thread t3 = new Thread (() => Threading1.func3 ());
timerThreads = Stopwatch.StartNew ();
t1.Start(); t1.Join();
t2.Start(); t2.Join();
t3.Start(); t3.Join();
timerThreads.Stop ();
Console.WriteLine ("Time taken for Other threads: " + timerThreads.ElapsedMilliseconds);
}
// Find maximum value in an array
static void func1()
{
// Code here.
}
// Find minimum value in an array
static void func2()
{
// Code here.
}
// Find average value of an array
static void func3()
{
// Code here.
}
}
答案 2 :(得分:1)
使用此..
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
finish();
}
return super.onKeyDown(keyCode, event);
}
答案 3 :(得分:1)
点击按钮 -
,从MainActivity启动SettingActivitybtnSecond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, SettingActivity.class));
}
});
启动SettingActivity后无需完成()MainActvity。
无需在SettingActivity中覆盖onKeyDown()或onBackPressed()。
无论你在设置活动中使用wt更改都不会覆盖上述任何方法,它都可以正常工作。
答案 4 :(得分:1)
关闭SettingActivity时尝试不执行任何操作。
这是你的活动堆栈。
首先:MainActivity
启动SettingActivity:MainActivity-> SettingActivity
在onBackPressed()
中启动MainActivity:MainActivity-> SettingActivity-> MainActivity
然后完成SettingActivity:MainActivity-> MainActivity
请注意,有两个MainActivities,我认为这就是为什么你的MainActivity看起来像重启。