0

先简单介绍一下我的应用程序。它是一个测验应用程序。它有一个显示问题的主屏幕,该问题会立即加载,箭头previous指向next其他测验问题。我一遍又一遍地使用相同的布局,只是通过传递不同的问题数据,所以当我点击“下一步”按钮时,它只会intent向同一个类启动一个不同的数据。在我的单一布局开始时,我会稍微检查一下用户是否单击以隐藏免责声明。

所以我的免责声明会在应用程序开始时弹出。它有一个dismiss按钮和一个Dont show this again复选框。我可以让复选框完美地工作,但是当他们按下按钮SharedPreferences时会出现问题。Dismiss由于我重复使用相同的布局,因此每当用户导航到新问题时,都会弹出免责声明。我只希望它在第一个屏幕上弹出,例如当应用程序加载时。

我尝试设置另一个SharedPreference 以在用户点击时隐藏免责声明,dismiss但一旦我隐藏它,它就再也不会回来了,因为当用户再次加载应用程序时,仍然设置了共享偏好。我的问题是知道在哪里设置偏好!我尝试重置它,onPause()但没有奏效。

所以,我要问的是,如何确定一个活动是否是第一个要加载的活动,所以我只能在那时进行免责声明检查,而不是在随后的每个屏幕中进行检查?

谢谢。

编辑:这是我的OnCreate()方法:

final static String disclaimerShownPref = "disclaimerShown";
final static String disclaimerShownOnce = "disclaimerShownThisSession";

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    //Checks to see if the boolean is set
    //The second argument is the default to use if the preference can't be found
    if(!mPrefs.getBoolean(disclaimerShownPref, false))
    {
        if(!mPrefs.getBoolean(disclaimerShownOnce, true))
        {
            new Disclaimer(this);
        }
    }

    topMostLayout=buildHomeScreen();
    setContentView(topMostLayout);
}
4

3 回答 3

1

在您的情况下,我建议在您的活动中使用静态变量:

private static boolean sFirstTime = true;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    if( sFirstTime )
    {
        /*
         * Place the disclaimer check here 
         */
        sFirstTime = false;
    }
    else
    {

    }

话说回来。我会考虑一种更好的方法来在您的活动的同一实例中切换问题,而不是每次都创建一个新问题。

祝你好运!

于 2012-06-01T17:52:00.817 回答
0

与其使用 Intent 启动新版本的活动,不如直接使用 onClickListener 调用 setText() 并更改显示问题?这可能会使 Activity 生命周期更直观,并可能简化您的代码。

于 2012-06-02T15:32:51.703 回答
0

而不是每次用户在问题之间导航时重新启动活动,您应该只编写一个函数,当单击上一个或下一个时,将使用新的问题数据重新填充视图。至于免责声明,如果您希望每次启动应用程序时都显示它,那么使用共享首选项设置变量并不是最好的方法。应用程序关闭时不会删除共享首选项,只有在您手动删除它们或完全卸载应用程序时才会删除它们。而是在您的活动中创建一个变量来跟踪是否单击了“关闭”。只要应用程序正在运行,对话框就不会显示,但是当应用程序重新启动时,所有变量(包括跟踪显示对话框的变量)都将被重置并再次显示。

于 2012-06-01T18:07:56.053 回答