让对话框仅显示一次

3
我在我的应用程序中有一个警报对话框,它会在应用程序启动时立即启动。我希望我的 alertDialog 只在第一次安装后首次启动活动时显示,之后除非用户删除应用程序并重新安装,否则不再弹出警报对话框。 我已经尝试查看如何实现此方法,并尝试学习编写正确的代码,但我似乎无法正确完成它。所以能否有人帮我实现这种方法并解决这个问题。
    public class MainActivity extends Activity {


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

      SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    boolean initialDialogDisplayed = preferences.getBoolean("InitialDialog", false);
    if (!initialDialogDisplayed) {
        Editor editor = preferences.edit();
        editor.putBoolean("InitialDialog", true);
        editor.commit();


final AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);

        alertDialog.setTitle("Alert");
        alertDialog.setIcon(R.drawable.ic_launcher);
        alertDialog.setMessage("Dialog");

        alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int which) {

            }
         });

        alertDialog.show();
                final EditText et = (EditText) findViewById(R.id.editText1);
                Button getAnswer = (Button) findViewById(R.id.button1);
                getAnswer.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {       
                        if (et.getText().toString().length()==0) {
                            Toast.makeText(getApplicationContext(),"Can't Be Blank!",Toast.LENGTH_LONG).show();             

                        }else{
                            EditText et = (EditText) findViewById(R.id.editText1);
                            String searchTerm = et.getText().toString().trim();         
                            Intent in = new Intent(MainActivity.this, ListView.class);
                            in.putExtra("TAG_SEARCH", searchTerm);
                            startActivity(in);
                        }

                    }
                });
            }
         }


        @Override
        protected void onStop() {
            // TODO Auto-generated method stub
            super.onStop();
        }}
2个回答

3

您可以使用共享首选项来存储对话框已经被显示的事实。您应该在对话框显示时保存一个值,并读取它以检查是否需要再次显示。

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    boolean initialDialogDisplayed = preferences.getBoolean("InitialDialog", false);
    if (!initialDialogDisplayed) {
        Editor editor = preferences.edit();
        editor.putBoolean("InitialDialog", true);
        editor.commit();

        // Display the dialog here
    }

不,完全不是这样,但我认为公布完整的活动内容对你了解情况会更公正。 - Inman Douche
不,我第一次启动它时它可以工作,但是在我再次启动模拟器后,它没有显示出来,我的应用程序也没有响应任何操作...但是你能看一下这个链接并查看codeMagic的答案吗?我认为这可能是原因http://stackoverflow.com/questions/18796561/shared-prefence-for-alert-dialog-is-making-my-application-non-responsive,如果你没有看到,我还更新了我的问题。 - Inman Douche
你的代码还没有添加只显示一次对话框的部分吗?此外,本周我不在家,无法检查我的代码(它在哪里运行)。 - Szymon
抱歉..我刚刚将sharedPreference添加到问题中,希望你现在能更好地看到它..祝你度过愉快的假期!(如果你正在度假的话) :) - Inman Douche
你需要将代码从 onClick 移到启动活动的位置。对话框只会被显示一次,因此您的活动永远不会启动。 - Szymon
显示剩余3条评论

3

您可以通过SharedPreferences存储标志值。

 SharedPreferences settings = getSharedPreferences("pref_name", 0);
 boolean installed = settings.getBoolean("installed", false);

if(!installed){

   //showDialog

   SharedPreferences.Editor editor = settings.edit();
   editor.putBoolean("installed", true);
   editor.commit();

}

链接:http://developer.android.com/guide/topics/data/data-storage.html#pref


SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("installed", true); editor.commit(); 放在对话框的 onClick 方法下面会更好吗? - Inman Douche
一样的。一旦对话框消失,您必须将已安装的值设置为true。 - Idipaolo
1
很抱歉回答晚了。我只是想让你知道现在一切都正常了。谢谢! - Inman Douche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接