【问题标题】:Display Dialog on App's first load and Handling Orientation Changes应用程序首次加载和处理方向更改时显示对话框
【发布时间】:2013-09-12 06:57:57
【问题描述】:

我目前对如何仅在应用程序第一次仅通过方向更改加载时才显示我的对话框感到困惑。我只有一项由选项卡组成的活动。

问题:

我尝试使用boolean 变量和preferences,但我不知道在活动视图被破坏的情况下将它们放置在哪里。销毁是通过退出应用程序或方向更改。其次,在方向更改期间,对话框应在第一次再次显示,但即​​使我 dismiss 对话框和 do 方向更改 - 对话框会再次显示,这不应该发生.我不喜欢使用onConfigurationChanged(Configuration)

 boolean FirstTimeActivityOpened = true;
 boolean dialogDismissed = false;
     boolean orientationChanged = false;

++++++++++

if(FirstTimeActivityOpened && dialogDismissed && orientationChanged ){
  loadDialog(this);
}

    new OrientationEventListener(MainActivity.this, 
                                 SensorManager.SENSOR_DELAY_NORMAL){

            @Override
            public void onOrientationChanged(int orientation) {
                // TODO Auto-generated method stub

                orientationChanged = true;
                //Toast.makeText(MainActivity.this, "onOrientationChanged"+ orientation, Toast.LENGTH_SHORT).show();

            }};

加载对话框

dialog.setOnDismissListener(new OnDismissListener(){

            @Override
            public void onDismiss(DialogInterface arg0) {
                // TODO Auto-generated method stub
                dialogDismissed = true;
                Toast.makeText(MainActivity.this, "Dialog Dismissed", Toast.LENGTH_SHORT).show();

            }});

+++++++++++++++

@Override
public void onDestroy() {
  super.onDestroy();
        if(dialog != null && dialog.isShowing()) {

            dialog.dismiss();
         }

        //or

         if(dialog != null) {

            dialog.dismiss();
         }

  }

我在学习期间发现:

首次加载:

onCreate()
onStart()
onResume()

改变或方向:

onPause()
onStop()
onDestroy()

onCreate()
onStart()
onRestoreInstantState()
onResume()

Activity 不可见但未销毁

onPause()
onStop()

Activity 从暂停状态打开:

onRestart()
onStart()
onResume()

Activity 不可见并被破坏:

onPause()
onStop()
onDestroy()

Activity 被销毁并重新打开

onCreate()
onStart()

【问题讨论】:

    标签: java android android-dialog


    【解决方案1】:

    我认为您应该将它们存储在shared preferences 中,这样您在重新启动应用程序或重新加载活动时就不会丢失它们。

    编辑:

    首先,将此行添加到您的清单中(如果尚未完成):

    android:configChanges="orientation"
    

    添加它不会让您的活动在方向改变时重新启动。 在这种情况下,您可以在活动的 onCreate() 方法开始时将 FirstTimeActivityOpened 设置为 true,并且可以在 onDestroy() 中将其设置为 false。

    现在,您已经知道方向何时改变了。所以当它发生变化时,你只需要在你的应用程序第一次打开时提示你的对话框。

    希望对你有帮助

    【讨论】:

    • 我同意某些观点,您如何确定是否真的是第一次加载应用程序?就像活动的生命周期方法中的哪个位置一样,您应该知道它是否真的只是方向更改而不是应用程序的退出。谢谢
    • 如果你指的是onConfigurationChanged(Configuration),我尽可能不使用。
    • 添加我在回答中写的那行应该会让你更容易。
    • 我也是说我不会用android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|locale|layoutDirection"
    猜你喜欢
    • 2014-01-16
    • 2017-10-18
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 2016-10-03
    • 1970-01-01
    相关资源
    最近更新 更多