在重新创建()后onBackPressed不调用

Sla*_*ava 5 android back-button recreate onbackpressed

问题描述:

我的应用程序有主要活动和设置活动.每次关闭设置活动后,主活动都会重新创建.

可以通过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();
}
Run Code Online (Sandbox Code Playgroud)

}

Mir*_*ili 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);
Run Code Online (Sandbox Code Playgroud)