2016-09-25 2 views
4

ich Anfänger Statt auf Android bin, Code wiederholt für den Dialog in jeder Aktivität zu schreiben, ich von einer anderen Klasse aufrufen Dialog

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

} 
nur eine Klasse erstellt, die den Dialog zeigen alle Methoden enthält, habe ich Schnipsel

kleinen Code gegeben

Bin

//dialogObj is instance of the above class 

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

Aufruf Wenn ich den Code-Dialog sichtbar laufen, aber Taste ist nicht, ist dies wegen DialogInterace.onClickListener ?, ich möchte nur wissen, ist dies eine gute Idee, wie dies zu tun ?, Wenn es dann ist, was ist der richtige Weg zu tun? Bitte hilf mir.

danke.

Antwort

4

Nur ich will meinen Weg zu Ihnen teilen, wie Ich benutze.Sie können Klasse wie machen und dann anrufen, wo Sie wollen.

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

und ich habe eine Schnittstelle für diesen Dialog erstellt,

public interface OnDialogButtonClickListener { 

void onPositiveButtonClicked(); 

void onNegativeButtonClicked(); 
} 

Gerade diese Schnittstelle in Ihrer Tätigkeit implementieren, wo Sie Objekt-Dialog und mit Hilfe der Klasse verwenden möchten Sie Dialog wie folgt verwenden,

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

können Sie diese beiden Methoden in acitivty außer Kraft setzen,

@Override 
public void onPositiveButtonClicked() { 

} 

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

} 

Danke, hoffe, das wird dir helfen.

+0

Danke fürs Aufräumen. – Manjunath

+0

Großartig, glücklich, Ihnen zu helfen :) – Saveen

0

beste Weg, um alle Ihre Dialoge in einer Basisklasse zu definieren, dann rufen

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

Dann erweitern eine andere Klasse BaseActivity und rufen

showDialog(DIALOG_X); 
Verwandte Themen