问题描述:
我的App有Main Activity和Setting activity每次关闭设置活动后,Main活动都会重新创建。
可以在两个地方通过finish()关闭主要活动(应用程序退出):操作栏中的主页按钮和后退按钮(硬件或弹出栏)。
主页按钮正常工作,后退按钮在开始时工作,但如果用户在设置活动中,关闭它并返回主活动,则不再调用onBackPressed()函数。
如果我删除娱乐,后退按钮工作正常,就像主页按钮一样。
那么,如果有人知道为什么recreate()搞砸了Back按钮呢?
谢谢。
相关代码部分:
主要活动:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// Open Settings Activity
case R.id.menuSettings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivityForResult(intent, REQUEST_SETTINGS);
return true;
// Close the App
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK) {
return;
}
switch (requestCode) {
case REQUEST_SETTINGS:
// Recreate activity
recreate();
break;
}
}
// Close App on Back Button Click
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}}
发布于 2018-09-05 22:05:21
只需将recreate()方法替换为
finish();
startActivity(getIntent());&看魔术。您不需要重新设置任何bundle和intent。
发布于 2017-01-30 05:09:55
我找到了一个解决方案。
在调用recreate()方法之前,似乎需要完成一些事情。我在onResume内部调用它,而你在onActivityResult方法内部调用它。
因此,我专门为它提供了一点喘息之机,以完成它的进程(100毫秒对我来说很好)。
这是我的解决方案:
// Use this instead of calling recreate() directly.
// This will call recreate() after 100 milliseconds, ASYNCHRONOUSLY:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
recreate();
}
}, 100);发布于 2017-02-12 17:08:05
因为执行了super.onBackPressed(),所以您的完成可能不会像预期的那样工作。
另外,finish并不会关闭你的应用程序,它只是完成了活动。如果backstack上有另一个activity,它将打开那个activity。这在您的应用程序逻辑中可能是很好的,但请记住这一点。
其他:我不能重现你的问题,所以你的问题可能在别的地方。这是我用来重现问题的代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
recreate();
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
}我才意识到这是一个古老的问题。如果你仍然有它,请提供MainActivity的完整代码,我将更新答案,以便我们可以帮助其他人。
https://stackoverflow.com/questions/37832489
复制相似问题