2016-09-25 84 views
4

我初学者到Android调用对话,而不是在每个活动重复编写代码的对话,我刚刚创建,其包含了所有的方法来显示对话框一个班,我已经给了一小段代码从另一个类

public class Dialogues extends Activity implements DialogueMethods { 


    public void showAlertDialog(Context context, String title, String message) { 

     AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); 
     alertDialog.setTitle(title); 
     alertDialog.setMessage(message); 
     alertDialog.show(); 
} 

    //this method am calling 

    public void showAlertDialog(Context context, String title, String message, String ButtonText, boolean cancel) { 

     AlertDialog.Builder alertDialog = new AlertDialog.Builder(context); 
     alertDialog.setTitle(title); 
     alertDialog.setMessage(message); 

     if(cancel) { 

      alertDialog.setNegativeButton(ButtonText, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
       finish(); 
      } 
     }); 
     } 

     alertDialog.show(); 
    } 

} 

我打电话

//dialogObj is instance of the above class 

dialogObj.showAlertDialog(MyActivity.this, "Error", "Not Connected to Internet", "Exit", true); 

当我运行代码对话框是可见的,但按钮没有,这是因为DialogInterace.onClickListener的?我只是想知道这是好主意,做这样的?如果是的话,那么正确的做法是什么。请帮帮我。

谢谢。

回答

4

正是我要我的方式分享给大家如何我正在使用。你可以让课堂喜欢,然后打电话到你想要的地方。

public class DialogsUtil { 

private Context mContext; 

public DialogsUtil(Context context) { 
    this.mContext = context; 
} 

/** 
* Return an alert dialog 
* 
* @param message message for the alert dialog 
* @param listener listener to trigger selection methods 
*/ 
public void openAlertDialog(Context context, String message, String positiveBtnText, String negativeBtnText, 
          final OnDialogButtonClickListener listener) { 

    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setPositiveButton(positiveBtnText, (dialog, which) -> { 
     dialog.dismiss(); 
     listener.onPositiveButtonClicked(); 

    }); 

    builder.setNegativeButton(negativeBtnText, (dialog, which) -> { 
     dialog.dismiss(); 
     listener.onNegativeButtonClicked(); 

    }); 
    builder.setTitle(context.getResources().getString(R.string.app_name)); 
    builder.setMessage(message); 
    builder.setIcon(android.R.drawable.ic_dialog_alert); 
    builder.setCancelable(false); 
    builder.create().show(); 
} 

/** 
* return a dialog object 
* @return 
*/ 
public Dialog openDialog(@LayoutRes int layoutId) { 
    Dialog dialog = new Dialog(mContext); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 
    dialog.setContentView(layoutId); 
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
    dialog.getWindow().setGravity(Gravity.BOTTOM); 
    dialog.setCancelable(true); 
    dialog.setCanceledOnTouchOutside(false); 
    return dialog; 
} 
} 

,我已经创建了一个接口,这个对话框中,

public interface OnDialogButtonClickListener { 

void onPositiveButtonClicked(); 

void onNegativeButtonClicked(); 
} 

只是实现您的活动要使用对话框并用类对象的帮助,您可以使用对话框这样这个接口,

mDialogsUtil.openAlertDialog(YourActivity.this, "text message", "positive button msg", "Negative button msg", this); 

您可以覆盖在你的acitivty这两种方法,

@Override 
public void onPositiveButtonClicked() { 

} 

//user clicked cancel.Close the application 
@Override 
public void onNegativeButtonClicked() { 

} 

谢谢希望这会帮助你。

+0

感谢您的清理。 – Manjunath

+0

太棒了,高兴地帮助你:) – Saveen

0
来定义一个基类所有的对话框

的最佳方式,然后调用它

Class BaseActivity extends Activity{ 

int DIALOG_X = 1; 
int DIALOG_Y = 2; 
int DIALOG_Z = 3; 
// More Dialog identifiers 

ProgressDialog progressDialog; 
AlertDialog alertDialog; 
//More dialog objects if you need 

protected Dialog onCreateDialog(int id) { 
    Dialog dialog; 
    switch(id) { 
    case DIALOG_X: 
     // do the work to define the X Dialog 
     break; 
    case DIALOG_Y: 
     // do the work to define the Y Dialog 
     break; 
    default: 
     dialog = null; 
    } 
    return dialog; 
} 
} 

然后另一个类扩展BaseActivity并调用

showDialog(DIALOG_X);