问题描述:
我的应用有主要活动和设置活动。每次关闭设置活动后,主活动都会重新创建。
主要活动可以在两个地方通过finish()关闭(应用程序退出):操作栏中的主页按钮和后退按钮(硬件或弹出栏)。
Home按钮工作没有问题,Back按钮在开始时工作,但如果用户在Settings Activity中,关闭它并返回到Main Activity,onBackPressed()函数不再被调用。
如果我删除了娱乐,则“返回”按钮工作正常,就像“主页”按钮一样。
所以如果有人知道为什么要重新创建()搞乱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();
}
}
答案 0 :(得分:1)
只需将UNION
方法替换为
recreate()
&看魔术。
您无需重新设置任何finish();
startActivity(getIntent());
和bundle
。
答案 1 :(得分:0)
我找到了解决方案......
在调用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);
答案 2 :(得分:0)
您的完成可能无法正常工作,因为您执行super.onBackPressed()。
另一个注意事项是,完成并未关闭您的应用,它只会完成活动。如果在Backstack上有另一个活动,它将打开那个活动。可能这在您的应用程序逻辑中很好,但要记住它。
其他:我无法重现您的问题,因此您的问题可能在其他地方。这是我用来重现你的问题的代码:
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的完整代码,我将更新答案,以便我们可以帮助其他人。