Как закрыть занятие из пользовательского диалогового окна Class? - PullRequest
2 голосов
/ 05 августа 2011

У меня есть класс AlertDialogUtils, который генерирует AlertDialog, так что его можно вызывать из любого действия при возникновении ошибки.Проблема в том, что я не могу вызвать finish() из метода createDialog() как onClickListener для кнопки «отклонить».

Есть мысли, как это возможно?для класса AlertDialogUtils:

public class AlertDialogUtils extends Dialog {

    private Context mContext;

    public AlertDialogUtils(Context context) {
        super(context);
        mContext = context;
    }

    public void CreateAlertDialog(String errorMessage) {
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        builder.setMessage(errorMessage)
            .setCancelable(true)
            .setNeutralButton("Dismiss", new AlertDialog.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    mContext.finish(); 
                    //error here. Intend to close the activtiy that created this dialog and has the error
                }
            });
        AlertDialog alert = builder.create();
        alert.setOwnerActivity((Activity)mContext); 
        // The dialog utils is outside an activity. Need to set owner
        alert.show();
    }
}

Ответы [ 3 ]

2 голосов
/ 05 августа 2011

Вместо передачи Context в конструкторе, передайте Activity. Он наследует Context, так что вы можете использовать его где угодно Context; в то же время вы также можете позвонить finish(), когда вам это нужно.

2 голосов
/ 17 августа 2011

Спасибо за предложения. ICloseActivity, к сожалению, у меня не сработало. Я решил проблему завершения действия и закрытия диалогового окна следующим образом: Я изменил метод CreateAlertDialog() следующим образом и создал вспомогательную функцию exitActivity():

public void CreateAlertDialog(String title, String errorMessage, int alertType){
    AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
             builder.setTitle(title)  
        .setIcon(R.drawable.alert_icon)
        .setMessage(errorMessage)
        .setCancelable(false)
        .setPositiveButton("Dismiss", new AlertDialog.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                           dismiss = true;
                           exitActivity();

                       }
                   });
        AlertDialog alert = builder.create();
        alert.setOwnerActivity((Activity)mContext);
            alert.show();
                }
             public void exitActivity() {
          this.getOwnerActivity().finish();
          }

При вызове этой утилиты я просто устанавливаю прослушиватель dismiss и завершаю действие, если оно отменено.

             dialog = new AlertDialogUtils(MyActivity.this);
    dialog.setOwnerActivity(MyActivity.this);
    dialog.CreateAlertDialog(getString(R.string.no_data),       
                        getString(R.string.empty_table_message), R.id.list_view_alertType);
    dialog.setOnDismissListener(new DialogInterface.OnDismissListener(){
        @Override
        public void onDismiss(DialogInterface arg0) {
            finish();
        }
    });

Таким образом, я могу справиться с закрытием текущей активности, если это необходимо. Кроме того, для действий, которые я не хотел закрывать вместо вызова exitActivity(), я позвонил dialog.cancel():

               .setPositiveButton("Dismiss", new AlertDialog.OnClickListener() {
             public void onClick(DialogInterface dialog, int id) {
                cancel();

             }
        });
2 голосов
/ 05 августа 2011

Не могли бы вы попробовать это, пожалуйста? :

interface ICloseActivity {
void close();
}

class MyActivityToClose extends Activity implements ICloseActivity {

public void close() {
finish();
}

}

// -------

public class AlertDialogUtils extends Dialog {

    private Context mContext;

    private ICloseActivity mICloseActivity;

    public AlertDialogUtils(Context context, ICloseActivity aActivity) {
        super(context);
        mContext = context;
        mICloseActivity = aActivity;
    }

    public void CreateAlertDialog(String errorMessage) {
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        builder.setMessage(errorMessage)
           .setCancelable(true)
           .setNeutralButton("Dismiss", new AlertDialog.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
               //    mContext.finish(); 
              //error here. Intend to close the activtiy that created this dialog and has the error

                //TRY THIS please:
                mICloseActivity.close();
               }
           });
    AlertDialog alert = builder.create();
    alert.setOwnerActivity((Activity)mContext); 
          // The dialog utils is outside an activity. Need to set owner
    alert.show();
}
...