0

我做了一个共享首选项系统,它将检查用户是否第一次启动应用程序,如果是,它将启动一个AlertDialog

    public boolean onCreateOptionsMenu(Menu menu){
    // Make MenuInflater
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    inflater.inflate(R.menu.main, menu);
    SharedPreferences settings = getSharedPreferences("prefs", 0);
    boolean firstRun = settings.getBoolean("firstRun", true);
    if ( firstRun )
    {
        AlertDialog.Builder ad = new AlertDialog.Builder(this);  
        ad.setTitle("Nieuwe gebruiker?");  
        ad.setMessage("- Als u naar de volgende dag wilt kun u de knop morgen gebruik in het menu.\n - In het menu kunt u ook terug naar vandaag en u kunt de pagina refreshen. \n - U kunt zelfs de roosterwijzigingen delen via WhatsApp of via E-Mail.");   
        ad.setNegativeButton("OK", new DialogInterface.OnClickListener() {  
           public void onClick(DialogInterface dialog, int id) {  
             dialog.dismiss(); 
        }  
        });  
        ad.show();
    }
// Return True
return true;
}

但是我认为我做得不好,因为每次启动应用程序时它都会启动 AlertDialog。我做错了什么,我该如何解决?

4

3 回答 3

2

将您的代码更改为

....
boolean firstRun = settings.getBoolean("firstRun", true);
if ( firstRun ){
  settings.edit().putBoolean("firstRun", false).commit(); //set your flag to false
....
于 2013-06-22T19:54:09.943 回答
1

firstRun显示对话框后,您不会将 SharedPreferences 中的值更改为 false。

在 AlertDialog 的 OK 按钮中,将firstRunSharedPreferences 中的值保存为false,这样就不会再次触发 if 语句。

于 2013-06-22T19:53:43.527 回答
1

我做了类似的事情,我通过创建一个 sqlite 数据库解决了这个问题,当第一次打开应用程序时,我检查数据库表是否为空,如果它是我做的事情,如果数据库中有数据,则将数据插入数据库我什么都不做.

于 2013-06-22T19:55:44.060 回答