2016-11-27 19 views
0

Я создаю CustomDialog с использованием для BackBTN, как показано ниже:Как закрыть/отменить диалоговый класс из Activity in android?

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(); 
    } 
} 

Всякий раз, когда я возвращаюсь к MainActivity, этот диалог существует. Поэтому я хочу закрыть/отстранить его от класса MainActivity, например cdd.dismise;. Но, к сожалению, этого не происходит. Не могли бы вы помочь мне? Благодарности

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; 
      } 
     } 
    } 

Я хочу, чтобы закрыть/dismise cdd в NOTE_RESTORE.

ответ

1

Если вы хотите, чтобы скрыть диалог всякий раз, когда вы оставляете активность, поддерживать диалог в качестве члена, и уволить его 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; 
    } 
} 
+0

я это делаю, но это CDD exsisting! также добавляю 'AdultActivity.this.onStop' в MinimizeBTN, но ничего не происходит. вы должны заметить, что я использую 'moveTaskToBack (true);' для MinimizeBTN. Мне нужна эта статута для моей деятельности, а также cdd тоже должен смириться. –

+0

@MinaDahesh не использовать onStop() напрямую. Он будет вызываться, как только вы минимизируете. Вы уверены, что назначаете член cdd, а не локальную переменную, как раньше? В вопросительном коде я по-прежнему вижу, что вы назначаете локальный метод cdd, а не член. –

+0

Я не понимаю, что вы имеете в виду ... скажите, это ясно –

 Смежные вопросы

  • Нет связанных вопросов^_^