警告对话框多次显示设备摇晃 Android

Alert Dialog shows multiple times On device shake Android

我正在创建一个应用程序,摇动设备时会显示一个警告对话框。我有一个常用的方法来显示我从另一种方法调用的对话框,以及当设备被摇动时(虽然不是同时)。因此,当我从其他方法调用显示对话框方法时,对话框会正确显示并消失。只有当从 onShake() 调用 show dislog 方法时,它才会显示两次,有时甚至更多。

这是我的代码:-

@Override
    public void onShake(float force) 
    {
        // TODO Auto-generated method stub

        cal.set(Calendar.HOUR_OF_DAY, 11);
        cal.set(Calendar.MINUTE, 30);
        date =  cal.getTime();
        timeString =  sdf.format(date);


        showDialog(timeString, "Confirm ");
        if(alert!=null && !alert.isShowing())
        {
            alert.show();
        }

    }

public void showDialog(String timeString, String title)
    {

        builder = new AlertDialog.Builder(getActivity());

        builder.setTitle(title);
        String timeString1 = timeString.split("T")[1];
        builder.setMessage("Reaching at:"+" "+ timeString1+"?");

        builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Do nothing

            }
        });

        builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int which) 
            {
                // Do nothing but close the dialog

                new AddStatusTask().execute();

            }

        });

        alert =  builder.create();

    }


private class AddStatusTask extends AsyncTask<Void, Void, String>
    {
        String AddedResult;
        ProgressDialog pd;
        //Get Value of accessToken

        @Override
        protected void onPreExecute()
        {
            // TODO Auto-generated method stub
            super.onPreExecute();

            pd = new ProgressDialog(getActivity());
            pd.setMessage("Updating..");
            pd.show();
        }
        @Override
        protected String doInBackground(Void... params)
        {
            // TODO Auto-generated method stub
            //Some code;
        }

        @Override
        protected void onPostExecute(String result)
        {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            if(result.equalsIgnoreCase("Sorry"))
            {

                pd.dismiss();

                Toast.makeText(getActivity(), "Could not update. Please try again.", Toast.LENGTH_LONG).show();
            }


            if(pd!=null &&pd.isShowing())
            {
                pd.setMessage("Updated");


                pd.dismiss();
                Toast.makeText(getActivity(), "Updated!", Toast.LENGTH_LONG).show();
            }


        }


    }

多次显示很自然,要控制它,请使用布尔值并将其设置为 false 以进行初始化,当对话框显示时将其设置为 true,当它被关闭时再次将其设置为 false。至于每次要显示对话框时进行控制,请检查此布尔值以确保显示它的一个实例。

您好,我只是提供示例代码。请相应更改。

private boolean bool=true;

        @Override
        public void onShake(float force) 
        {
            // TODO Auto-generated method stub

            if(bool)
            {
                bool=false;
                cal.set(Calendar.HOUR_OF_DAY, 11);
                cal.set(Calendar.MINUTE, 30);
                date =  cal.getTime();
                timeString =  sdf.format(date);


                showDialog(timeString, "Confirm ");
                if(alert!=null && !alert.isShowing())
                {
                    alert.show();
                }
            }

        }

对话工作完成后。为下一次摇动使布尔变量为真。如果您有任何疑问,请告诉我。