Android - 免责声明在每次意图后都会弹出

时间:2012-06-01 17:37:20

标签: android sharedpreferences

首先关注我的应用。它是一个测验应用程序。它有一个显示问题的主屏幕,可以直接加载,还有previousnext的箭头可以转到其他测验问题。我只是通过传递不同的问题数据来反复使用相同的布局,所以当我点击“下一步”按钮时,它只会向同一个类启动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);
}

3 个答案:

答案 0 :(得分: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
    {

    }

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

祝你好运!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

为什么不使用onClickListener来调用setText()并更改显示问题,而不是使用Intent来启动活动的新版本?这可能会使Activity生命周期更加直观,并可能简化您的代码。