简体   繁体   English

如何从Android的Activity中关闭/分离对话框类?

[英]how to close/dismise dialog class from Activity in android?

I create CustomDialog with using CustomDialogClass for BackBTN as below: 我通过使用CustomDialogClass for BackBTN创建CustomDialog ,如下所示:

    public void onBackPressed () {
    CustomDialogClass cdd = new CustomDialogClass(Adult1Activity.this);
    cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    cdd.show();
}


public class CustomDialogClass extends Dialog {
    public Activity c;
    public Button minimizeBTN, exitBTN;

    public CustomDialogClass(Activity a) {
        super(a);
        this.c = a;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.back_btn);
        minimizeBTN = (Button) findViewById(R.id.minimizing_app);
        exitBTN = (Button) findViewById(R.id.exit_completely);

       ...

    }

    @Override
    public void dismiss() {
        super.dismiss();
        //cdd.dismiss();
    }
}

Whenever I go back to the MainActivity, this dialog exists. 每当我返回MainActivity时,都会存在此对话框。 So I want to close/dismise it from MainActivity class like cdd.dismise; 所以我想从MainActivity类(如cdd.dismise;关闭/分离它cdd.dismise; . But unfortunately it does not happen. 但不幸的是,它没有发生。 Would you please help me? 你能帮我吗? Thanks 谢谢

MainActivity.class: MainActivity.class:

 public class MainActivity extends AppCompatActivity{
    public CustomDialogClass cdd; // back dialog
    private boolean isRunning = false;
    public String timeString;
    public NotificationManager notificationManager;
    private static final String EXTRA_NOTE = "NOTE";
    private static final String NOTE_RESTORE = "restore";
    private static final String NOTE_CLOSE = "close";

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

        handleIntent(getIntent());
    }

    //alert dialog for back btn
    public void onBackPressed () {
        CustomDialogClass cdd = new CustomDialogClass(Adult1Activity.this);
        cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        cdd.show();
    }


    public class CustomDialogClass extends Dialog {
        public Activity c;
        public Button minimizeBTN, exitBTN;

        public CustomDialogClass(Activity a) {
            super(a);
            this.c = a;
        }

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.back_btn);
            minimizeBTN = (Button) findViewById(R.id.minimizing_app);
            exitBTN = (Button) findViewById(R.id.exit_completely);

            minimizeBTN.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    MinimizeApp();
                    isRunning = true;

                    ExtendedNotification(timeString);
                }
            });


            exitBTN.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    CloseApp();
                }
            });

        }

        @Override
        public void dismiss() {
            super.dismiss();
        }
    }

//*****************Notification class******
    private void ExtendedNotification(String time) {
        final Intent resultIntentRestore = new Intent(this, Adult1Activity.class);
        resultIntentRestore.putExtra(EXTRA_NOTE, NOTE_RESTORE);
        PendingIntent restoreIntent = PendingIntent.getActivity(Adult1Activity.this,
                0, resultIntentRestore, PendingIntent.FLAG_UPDATE_CURRENT);

        final Intent resultIntentClose = new Intent(this, Adult1Activity.class);
        resultIntentClose.putExtra(EXTRA_NOTE, NOTE_CLOSE);
        PendingIntent closeIntent = PendingIntent.getActivity(Adult1Activity.this,
                2, resultIntentClose, PendingIntent.FLAG_UPDATE_CURRENT);

         final NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(Adult1Activity.this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("App Name")
                .setContentText(time)
                .setAutoCancel(true)
                .addAction(new NotificationCompat.Action(R.mipmap.ic_launcher, "Restore", restoreIntent))
                .addAction(new NotificationCompat.Action(R.mipmap.ic_launcher, "Close", closeIntent))
                .setContentIntent(restoreIntent);

         notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        Notification notification = notificationBuilder.build();
        notification.flags |= Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT;

        notificationManager.notify(0, notification);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent); // Make sure to call super
        handleIntent(intent);
}

    private void handleIntent(Intent intent) {
        final String a = intent.getStringExtra(EXTRA_NOTE);
        if (a != null) {
            switch (a) {
                case NOTE_RESTORE:
                    tv.setText(timeString);
                    **cdd.dismiss();**

                    break;

                case NOTE_CLOSE:
                    countDownTimer.cancel();
                    isRunning = false;
                    notificationManager.cancel(0);
                    CloseApp();
                    break;
            }
        }
    }

I want to close/dismise cdd in NOTE_RESTORE . 我想在NOTE_RESTORE关闭/分离cdd

If you want to hide the Dialog whenever you leave Activity, keep the dialog as a member, and dismiss it onStop() 如果要在每次离开“活动”时都隐藏对话框,请将该对话框保留为成员,然后在onStop()上将其关闭

// Keep track of the dialog
private CustomDialogClass cdd;

//alert dialog for back btn
public void onBackPressed () {
    // Assign to a member instead, not the local variable
    cdd = new CustomDialogClass(Adult1Activity.this);
    cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    cdd.show();
}

@Override
protected void onStop() {
    super.onStop();
    if (cdd != null) {
        cdd.dismiss();
        cdd = null;
    }
}

If you want to delete dialog from activity 如果要从活动中删除对话框

dialog.dismiss();

If you want to delete dialog from that dialog class than use 如果要从该对话框类中删除对话框而不是使用

this.dismiss();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM