Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何修改AlertDialog(Android)?_Java_Android - Fatal编程技术网

Java 如何修改AlertDialog(Android)?

Java 如何修改AlertDialog(Android)?,java,android,Java,Android,我是Java和Android Studio的初学者,所以我的问题是:我为一个活动创建了一个警报对话框窗口,正面按钮是“OK”,负面按钮是“No Thank”。如下面的代码所示 if(Times==0) { AlertDialog.Builder builder1 = new AlertDialog.Builder(this); builder1.setIcon(android.R.drawable.ic_dialog_alert); builder

我是Java和Android Studio的初学者,所以我的问题是:我为一个活动创建了一个警报对话框窗口,正面按钮是“OK”,负面按钮是“No Thank”。如下面的代码所示

if(Times==0) {
        AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
        builder1.setIcon(android.R.drawable.ic_dialog_alert);
        builder1.setTitle("Warning");
        builder1.setMessage("Rooting of a phone may void your Warranty in most of the cases,so it is adviced to proceed at your own risk");
        builder1.setCancelable(true);

        builder1.setPositiveButton(
                "OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Times += 1;
                        dialog.cancel();
                    }
                });

        builder1.setNegativeButton(
                "No Thanks",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();

                    }
                });
 }
这一切都很顺利,但现在的问题是,如果用户单击“确定”按钮,我希望它只显示一次,如果用户单击“确定”,我不希望再次显示它。我在我的类中创建了一个变量
times
,并将其初始化为零,如下所示

public class rootingRooting extends AppCompatActivity {

int Times=0;
并将完整的
AlertDialog
放入if循环中,并在用户单击“确定”时增加其值,以便在用户单击“确定”时循环只能执行一次,但每当我打开活动时,警报框都会显示,只需单击“确定”。所以,现在我想做的事情是:

  • 如果用户单击“确定”,则不应显示警报框

  • 如果用户单击“不感谢”按钮,我想带他参加家庭活动。那么,我应该如何使用“不谢谢”按钮的意图


  • 谢谢。

    您需要使用
    SharedReferences
    来持久保存数据,局部变量没有帮助。 大概是这样的:

    编辑根据您的要求,我添加了一个示例活动类来显示整个过程。有关更多信息,请参见中间的注释

    编辑2查看//第二次编辑注释后的代码


    您需要使用
    SharedReferences
    来持久保存数据,局部变量没有帮助。 大概是这样的:

    编辑根据您的要求,我添加了一个示例活动类来显示整个过程。有关更多信息,请参见中间的注释

    编辑2查看//第二次编辑注释后的代码


    谢谢你,威尔逊博士,但作为java和android的新手,我不知道在哪里我必须使用我希望你更具体一点的东西,坦率地说,这是我第一次听到SharedReference,我尝试在类声明之后放置第一个块,并导入了所需的文件,但仍然显示为“无法解析符号putin”或“无法解析符号apply”,谢谢..不要在活动声明之后放置第一个块,把它放在AlertDialog“OK”按钮的一次点击中。当你调用AlertDialogThank you drWilson时,把另外两个块放在if(times==0)的位置上。谢谢你,威尔逊博士。我想出来了,现在它可以像我想的那样工作了。还有一件事是我现在问的第二个问题,我如何在“不,谢谢”中使用意图按钮,如果用户点击将直接带他们回家或其他活动。请您回答这个问题,也很高兴它有帮助,(我已经更新了答案)。关于第二个问题,请参见我的第二次编辑。请参见
    对话框。SetNegativeButton
    方法。在
    MyActivity
    中写下当前活动的名称,在
    HomeActivity
    中写下要打开的活动的名称。如果您只想关闭当前活动,请调用
    finish()
    ,而不是使用intent。谢谢wilson博士,但作为java和android的新手,我不知道在哪里必须使用我希望您更具体一点的内容,坦率地说,这是我第一次听到SharedReference,我尝试在类声明之后放置第一个块,并导入了所需的文件,但仍然显示为“无法解析符号putin”或“无法解析符号apply”,谢谢..不要在活动声明之后放置第一个块,把它放在AlertDialog“OK”按钮的一次点击中。当你调用AlertDialogThank you drWilson时,把另外两个块放在if(times==0)的位置上。谢谢你,威尔逊博士。我想出来了,现在它可以像我想的那样工作了。还有一件事是我现在问的第二个问题,我如何在“不,谢谢”中使用意图按钮,如果用户点击将直接带他们回家或其他活动。请您回答这个问题,也很高兴它有帮助,(我已经更新了答案)。关于第二个问题,请参见我的第二次编辑。请参见
    对话框。SetNegativeButton
    方法。在
    MyActivity
    中写下当前活动的名称,在
    HomeActivity
    中写下要打开的活动的名称。如果只想关闭当前活动,请调用
    finish()
    ,而不是使用intent。
    public class MainActivity extends AppCompatActivity {
            SharedPreferences prefs;
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    //When the activity starts, we look into the shared prefs and get an int of name "ok_clicked" from it.
                    //0 will be the default value of the int if there is no int stored in sharedPreferences.
                    prefs = getSharedPreferences("myPrefs", MODE_PRIVATE);
                    int times = prefs.getInt("ok_clicked", 0);
                    //if the times value is 0, we will open the dialog, otherwise nothing happens
                    if (times==0){
                        openDialog();
                    }
                }
                //Read This comment First: We will create a Method, which create an alert Dialog.
                private void openDialog(){
                    AlertDialog.Builder dialog = new AlertDialog.Builder(this);
                    dialog.setTitle("Test").setMessage("Lorem ipsum dolor");
                    dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //When OK button is clicked, an int with value of 1 will be saved in sharedPreferences.
                            prefs = getSharedPreferences("myPrefs", MODE_PRIVATE);
                            SharedPreferences.Editor editor = prefs.edit();
                            editor.putInt("ok_clicked", 1);
                            editor.apply();
                        }
                    });
                    dialog.setNegativeButton("No Thanks", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                        //Second Edit: To open another acitivty on No Thanks Button
                        Intent intent = new Intent(MyActivity.this, HomeActivity.class);                                   
                        startActivity(intent);
                       }
                    });
                    dialog.show();
                }
            }