【问题标题】:Android: First run popup dialogAndroid:首次运行弹出对话框
【发布时间】:2011-11-25 15:23:36
【问题描述】:

我正在尝试制作一个仅在应用程序首次运行后显示的弹出对话框,它会提醒用户应用程序中的新更改。所以我有一个这样的对话框弹出:

new AlertDialog.Builder(this).setTitle("First Run").setMessage("This only pops up once").setNeutralButton("OK", null).show();

一旦他们关闭它,它就不会回来,直到下一次更新或他们重新安装应用程序。

如何将上面的对话框代码设置为只运行一次?

【问题讨论】:

标签: android dialog


【解决方案1】:

使用SharedPreferences 存储isFirstRun 值,并根据该值检查您的启动活动。

如果设置了值,则不需要显示对话框。否则,显示对话框并将 isFirstRun 标志保存在 SharedPreferences 中。

例子:

public void checkFirstRun() {
    boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getBoolean("isFirstRun", true);
    if (isFirstRun){
        // Place your dialog code here to display the dialog

        getSharedPreferences("PREFERENCE", MODE_PRIVATE)
          .edit()
          .putBoolean("isFirstRun", false)
          .apply();
    }
}

【讨论】:

  • 为此,我需要将getSharedPreference 更改为getSharedPreferences
  • 清单中的条目应该是什么才能让它工作?
  • 您无需在清单中添加任何内容即可使其正常工作。只要确保在清单中声明您的活动就足够了。
【解决方案2】:

虽然其他答案的总体思路是合理的,但您应该在共享首选项中保留一个布尔值,而不是一个布尔值,而是最后一次运行发生时间的时间戳,或者它发生的最后一个应用版本。

这样做的原因是您可能希望在升级应用程序时也运行第一次运行对话框。如果您只保留布尔值,则在应用升级时,该值仍然为 true,因此您的代码无法知道是否应该再次运行它。

【讨论】:

  • 你能给出一个sn-p作为你的理由吗?感谢您指出这一点,很高兴知道。
【解决方案3】:

这样,您可以在新安装和更新之间做出改变。

String StoredVersionname = "";
String VersionName;
AlertDialog LoginDialog;
AlertDialog UpdateDialog;
AlertDialog FirstRunDialog;
SharedPreferences prefs;

public static String getVersionName(Context context, Class cls) {
    try {
        ComponentName comp = new ComponentName(context, cls);
        PackageInfo pinfo = context.getPackageManager().getPackageInfo(
                comp.getPackageName(), 0);
        return "Version: " + pinfo.versionName;
    } catch (android.content.pm.PackageManager.NameNotFoundException e) {
        return null;
    }
}

public void CheckFirstRun() {
    VersionName = MyActivity.getVersionName(this, MyActivity.class);
    prefs = PreferenceManager.getDefaultSharedPreferences(this);
    StoredVersionname = (prefs.getString("versionname", null));
    if (StoredVersionname == null || StoredVersionname.length() == 0){
        FirstRunDialog = new FirstRunDialog(this);
        FirstRunDialog.show();
    }else if (StoredVersionname != VersionName) {
        UpdateDialog = new UpdateDialog(this);
        UpdateDialog.show();
    }
    prefs.edit().putString("versionname", VersionName).commit();
}

【讨论】:

    【解决方案4】:

    我使用它在第一次运行时显示帮助对话框。我不希望在更新后显示此内容。这更适合更改日志。

    private void doFirstRun() {
            SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
            if (settings.getBoolean("isFirstRun", true)) {
                showDialog(DIALOG_HELP);
                SharedPreferences.Editor editor = settings.edit();
                editor.putBoolean("isFirstRun", false);
                editor.commit();
            }
    }
    

    【讨论】:

      【解决方案5】:

      没有实际问题,但我假设您想知道如何达到预期的效果。如果是这种情况,则使用 SharedPreference 对象获取默认为 true 的布尔“首次运行”,并在首次运行后将其设置为 false。

      【讨论】:

        【解决方案6】:
         loginPreferences = getSharedPreferences("loginPrefs", MODE_PRIVATE);
         loginPrefsEditor = loginPreferences.edit();
         doFirstRun();
        
         private void doFirstRun() {
                SharedPreferences settings = getSharedPreferences("PREFERENCE", MODE_PRIVATE);
                if (settings.getBoolean("isFirstRun", true)) {
                    loginPrefsEditor.clear();
                    loginPrefsEditor.commit();
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putBoolean("isFirstRun", false);
                    editor.commit();
                }
            }
        

        我使用此代码来确保有人第一次运行该应用程序。 loginPrefsEditor 已从数据中清除,因为我有一个“记住我”按钮,可将数据存储到 SD 卡中。希望能帮助到你 !

        【讨论】:

          猜你喜欢
          • 2017-06-02
          • 2011-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多