2011-08-04 32 views
2

私はAlertDialogを生成するAlertDialogUtilsクラスを持っており、エラーが発生したときにどのアクティビティからでも呼び出すことができます。問題は、私がcreateDialog()メソッド内からfinish()onClickListenerと "dismiss"ボタンとして呼び出すことができないことです。カスタムダイアログボックスからアクティビティを閉じるには?

これはどのように考えられますか?

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

mContext.finish(): はまた、私はexitActivity()を呼び出す代わりに、クローズしたくなかった活動のために、私はdialog.cancel()と呼ばれますか? –

+0

おそらく、これは最も直接的な方法ではありませんが、アクティビティをパラメータとして 'CreateAlertDialog(String)'に渡さないのはなぜですか? – Brian

答えて

2

あなたはこのようにそれをしてくださいしてみてくださいもらえますか? :

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

代わりコンストラクタでContextを渡す、Activityを渡します。 Contextを継承していますので、どこでも使用できます。Context;同時に、必要に応じてfinish()に電話することもできます。

2

ありがとうございます。 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(); 
      } 

このユーティリティを呼び出している間、私は単純に却下を設定しますリスナーとその活動を終了するには、それが解雇されます。

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

このようにして、必要に応じて現在の活動を終了することができます。

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

      } 
     }); 
関連する問題