【问题标题】:Can I have an android activity run only on the first time an application is opened?我可以只在第一次打开应用程序时运行 android 活动吗?
【发布时间】:2014-09-03 20:28:25
【问题描述】:

好的,所以我正在玩一个 android 应用程序。

90% 的用例是用户希望直接进入主列表屏幕以查找他们要查找的内容。这就是我想要的默认屏幕。

但是,当用户第一次加载应用时,需要进行一些配置才能使列表屏幕对他们有任何价值。

所以我的问题是,如何在第一次打开应用程序时显示配置活动,然后显示未来打开的列表屏幕。

我还想在配置屏幕上放一个演示按钮,所以我想不仅仅是检测这是第一次,我特别想检测用户是否在第一个屏幕内执行了某些配置。

【问题讨论】:

    标签: android android-activity startup


    【解决方案1】:

    用户首次加载应用后,您可以在 SharedPreferences 中存储用户是否执行配置的详细信息。

     protected void storeSharedPrefs(String value) {
            /*
             * Storing in Shared Preferences
             */
            editor.putString("first", value);
            editor.commit();  //Commiting changes
        } 
    

    通过检查 SharedPreferences 检查每个应用程序是否按时加载,是否已正确输入其第一次和配置详细信息

    private boolean first_time_check() {
            /* 
             * Checking Shared Preferences if the user had pressed 
             * the remember me button last time he logged in
             * */
            String first = uPreferences.getString("first", null);
            if((first == null)){
                return false;
            }
            else 
                return true;
        }
    

    【讨论】:

    • 使用 contains() 比比较 getString() 和 null 更好。
    • 最好使用布尔值而不是字符串。 editor.putBoolean(PREF_FIRST_LAUNCH, false); 和 first_time_check 只包含 return PreferenceManager.getDefaultSharedPreferences(getApplicationContext()) .getBoolean(PREF_FIRST_LAUNCH, true);
    • 我用了这个方法。但是我遇到了返回按钮的问题。当应用程序使用后退按钮退出时,下次启动时它假定它不是第一次运行。这不是 Android 应用程序想要的,导致程序员无法将所有内容设置为应用程序启动的初始值。我该怎么办?
    • first_time_check() 方法去哪儿了?在第一个默认活动或其他类中?我有一个 WelcomeLogin 活动,该活动仅在第一次打开应用程序时使用,之后应用程序自动设置为按顺序的下一个 DashActivity。那么这段代码 sn-p 去哪里了呢?
    【解决方案2】:

    我喜欢 dweebsonduty 的方法。一种类似的方法是将它们的配置信息保存在 SD 卡上的文件中。您的应用程序可以通过检查这些文件并加载信息开始。如果加载成功,则继续进行下一个活动,否则将启动适当的活动以提示用户输入。

    我也做过同样的事情,但我没有切换活动,而是切换视图,直到获得所需的所有信息,然后继续。

    【讨论】:

      【解决方案3】:

      许多应用程序实际上将当前版本存储在 SharedPreferences 中,并检查它是否已安装更新。这是实现“更改了什么”弹出窗口或确保设置某些设置的一种聪明方法(我会警惕只有一个布尔标志,因为如果你想添加一个额外的设置,你将需要第二个标志和在第三次之后会变得混乱,等等)。

      【讨论】:

        【解决方案4】:

        字符串版本值 = "v.1.0"; final String PREFS_NAME = "MyPrefsFile";

            SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        
            if (settings.getBoolean(VersionValue, true)) {
                //the app is being launched for first time, do something        
                NewDialogFragment newFragment = new NewDialogFragment();
                newFragment.show(getFragmentManager(), "New");
                // record the fact that the app has been started at least once
                settings.edit().putBoolean(VersionValue, false).commit(); 
            }
        

        您可以这样做并且仍然得到相同的结果,如果您不完全了解如何检查应用程序是否已更新,我尝试了它这是一个小解决方法。相反,使用此代码,您只需将 String VersoinValue 更改为您当前的应用程序版本,android 就会认为该应用程序是新的首次应用程序,并且只会显示您编写的代码一次,直到您在下次更新时更改 VersionValue。 (:

        【讨论】:

        • 更好!您可以在您的 string.XML 文件中创建一个字符串,并在您的主 activity.java 文件中引用您的版本号和您的 VersionValue。 [请务必将上面的代码与版本值和内容一起放在 OnCreate 内容中]
        【解决方案5】:

        您将如何存储配置?

        如果它在 SQLlite 中,您可以创建一个名为 firstuse 的表,并在其中放置一个名为 hasbeenused 的字段并将其设为 null。然后,当使用该应用程序时,您可以在其中输入 1。然后,您可以在每次应用加载时读取它,如果该字段 = 1,则转到您的下一个活动。

        【讨论】:

        • 也许他甚至不需要额外的字段;他可以检查是否有所需的配置信息,如果没有,则抛出活动。无论如何,这似乎更具可扩展性。
        • 我确实尝试使用共享首选项进行设置,但这会导致后退按钮出现不良行为。我寻找了一些操作堆栈的方法,但它似乎只想对相同类型的活动这样做
        猜你喜欢
        • 2021-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多