【问题标题】:Dialog dismiss from other activity对话框从其他活动中关闭
【发布时间】:2018-02-13 14:01:14
【问题描述】:

我正在使用方法类进行警报对话框并从其他活动中显示它。 示例我的方法类具有像这样的警报对话框。

public void showDialog(){
    final Dialog dialog = new Dialog(context);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setCancelable(false);
    dialog.setContentView(R.layout.dialog);
    RelativeLayout but_buy =  dialog.findViewById(R.id.but_buy);
    RelativeLayout but_exit = dialog.findViewById(R.id.but_exit);
    but_exit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
            ((Activity) context).finish();

        }
    });
    but_buy.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intentSettingsnew = new Intent(context, SettingsActivity.class);
            context.startActivity(intentSettingsnew);

        }
    });
    dialog.show();

}

并在HomeActivity 中调用它

methods.showDialog();

但是当用户离开该活动时,我想将其从家庭活动中解散。让我知道是否有人可以建议我该怎么做。

谢谢

【问题讨论】:

    标签: java android android-alertdialog


    【解决方案1】:

    因此,您可以将Dialog class 声明为class variable,如下所示:-

    Dialog dialog;
    public void showDialog(){
          dialog = new Dialog(context);
          dialog.show();      
    }
    

    然后每当你想关闭它时,只需调用 stopDialog 方法:-

    public void stopDialog(){
         if(dialog != null) {
             dialog.dismiss();  
             dialog = null;    
         }
    }
    

    您可以查看您的top visible fragment and get instance。如果实例是你的dialog then dismiss 它。

    【讨论】:

    • 是的!这很好......谢谢
    【解决方案2】:
    final Dialog dialog;//declare as global 
    

    在里面创建

        dialog = new Dialog(getApplicationContext()); 
    

    然后

       public void showDialog(){
    
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.setCancelable(false);
            dialog.setContentView(R.layout.dialog);
            RelativeLayout but_buy =  dialog.findViewById(R.id.but_buy);
            RelativeLayout but_exit = dialog.findViewById(R.id.but_exit);
            but_exit.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                    ((Activity) context).finish();
    
                }
            });
            but_buy.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intentSettingsnew = new Intent(context, SettingsActivity.class);
                    context.startActivity(intentSettingsnew);
    
                }
            });
    
    
            dialog.show();
    
        }
    

    然后创建方法

    public void closeDialog(){
     if(dialog != null)
       dialog.dismiss();
     }
    

    调用你的 Homeactivity 销毁

        methods.closeDialog();
    

    【讨论】:

      【解决方案3】:

      不要使用final 来创建对话框对象。

      现在根据您的要求。

      创建dialog的全局对象,而不是showDialog()。喜欢:-

      Dialog dialog;
      

      并且,在

      showDialog(){
      dialog = new Dialog(context);
      

      现在, 关闭您可以使用的对话框

      if(dialog !=null){
        dialog.dismiss();
      }
      

      根据您的要求,是否在,

      onPause、onStop、onDestroy

      【讨论】:

        【解决方案4】:

        关于你的活动

        class YourActivty extends AppCompat{
        

        //让你的对话框引用类级别

         private Dialog dialog = new Dialog(context);
        

        //你的对话框调用方法

        @Override
        public void onDestroy(){
        
            dialog.dismiss();
        }
        

        【讨论】:

          猜你喜欢
          • 2017-08-09
          • 1970-01-01
          • 2014-05-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-13
          相关资源
          最近更新 更多