Android 从目的启动的系统屏幕无法在方向更改后继续运行

Android 从目的启动的系统屏幕无法在方向更改后继续运行,android,android-intent,Android,Android Intent,在我的android应用程序中,我想通过Intent将联系人保存在通讯录中。意图很好。但是,以下屏幕(选择联系人应保存在哪个通讯簿中)在活动的方向更改后无法保存,设备将返回到我的应用程序中。 实际上,我的用户必须再次按下我的按钮“保存联系人”,系统屏幕将再次显示。 我想要实现的是,这个系统屏幕不会因为方向改变而消失 如果我的英语不及格,这里有一个截图: 我不知道是否可以避免屏幕被关闭,因为系统需要重新创建屏幕以适应更改后的屏幕尺寸。 但是你可以在关闭屏幕,改变方向后立即再次打开对话框(甚至可以预

在我的android应用程序中,我想通过Intent将联系人保存在通讯录中。意图很好。但是,以下屏幕(选择联系人应保存在哪个通讯簿中)在活动的方向更改后无法保存,设备将返回到我的应用程序中。
实际上,我的用户必须再次按下我的按钮“保存联系人”,系统屏幕将再次显示。
我想要实现的是,这个系统屏幕不会因为方向改变而消失

如果我的英语不及格,这里有一个截图:


我不知道是否可以避免屏幕被关闭,因为系统需要重新创建屏幕以适应更改后的屏幕尺寸。
但是你可以在关闭屏幕,改变方向后立即再次打开对话框(甚至可以预先填充之前包含的数据)

如何建造那个工作区 您可以在活动中保存一些布尔变量,如“isDialogActive”,当对话框打开时将其设置为true,当对话框关闭时将其设置为false

接下来,您可以将该布尔值保存到onSaveInstanceState生命周期函数中的捆绑包中

protected void onSaveInstanceState(Bundle bundle) {
   super.onSaveInstanceState(bundle);
   bundle.putBoolean("is_dialog_active", this.isDialogActive);
}
@Override
protected void onCreate(Bundle bundle) {
    boolean dialogWasActiveBeforeChange = 
             bundle.getBoolean("is_dialog_active")

    if ( dialogWasActiveBeforeChange){
       //use your logic that opens the dialog ( that logic should also set 
       // this.isDialogActive to true )
    }
}
因此,现在当方向发生变化时,您可以将对话框在旋转之前是否处于活动状态的信息安全地发送到束。此捆绑包在方向更改后仍然有效,并在更改后传递给onCreate。因此,现在我们可以在onCreate lifecycle函数中重新创建活动时使用此信息(捆绑包)

protected void onSaveInstanceState(Bundle bundle) {
   super.onSaveInstanceState(bundle);
   bundle.putBoolean("is_dialog_active", this.isDialogActive);
}
@Override
protected void onCreate(Bundle bundle) {
    boolean dialogWasActiveBeforeChange = 
             bundle.getBoolean("is_dialog_active")

    if ( dialogWasActiveBeforeChange){
       //use your logic that opens the dialog ( that logic should also set 
       // this.isDialogActive to true )
    }
}

在manifest@Zoin Coder中的活动标记中添加此项。显示的屏幕是一个系统对话框,它不是OP应用程序的一部分,因此您的评论不相关。