我正在尝试找到重用显示自定义标题的Dialog的方法,然后将Yes / No click发送到已启动Dialog的功能.
我有两个按钮,保存和解除,并且都调用是/否对话,一个显示“你想保存”,另一个显示“关闭更改?”.
我认为我的程序非常“脏”但我想它可以工作,但我的问题是“查看视图”变量,我不知道如何将它从Activity传递给Dialog,所以我可以用它来回忆启动Dialog的功能.
提前致谢,
HerniHdez
我活动的.java(片段)
public void open_HH_Fragment_YesNo(View view,String aux_title,String aux_function) { Bundle bundle=new Bundle(); bundle.putString("setMessage",aux_title); bundle.putString("callingFunction",aux_function); DialogFragment newFragment = new HH_Fragment_YesNo(); newFragment.setArguments(bundle); newFragment.show(getSupportFragmentManager(),"HH_Fragment_YesNo"); } public void SaveChanges(View view,String aux_YesNo) { if (aux_YesNo == "") { Toast.makeText(this,"Save changes?",Toast.LENGTH_SHORT).show(); open_HH_Fragment_YesNo(view,"SaveChanges"); } else if (aux_YesNo == "Yes") { Toast.makeText(this,"Saving changes",Toast.LENGTH_SHORT).show(); } else if (aux_YesNo == "No") { Toast.makeText(this,"Save Cancelled",Toast.LENGTH_SHORT).show(); } } public void DismissChanges(View view,"Dismiss changes?","DismissChanges"); } else if (aux_YesNo == "Yes") { Toast.makeText(this,"Dismiss OK",Toast.LENGTH_SHORT).show(); Close(view); } else if (aux_YesNo == "No") { Toast.makeText(this,"Dismiss Cancelled",Toast.LENGTH_SHORT).show(); } } // The dialog fragment receives a reference to this Activity through the // Fragment.onAttach() callback,which it uses to call the following methods // defined by the HH_Fragment_YesNo.YesNoDialogListener interface @Override public void onDialogPositiveClick(DialogFragment dialog,View view,String aux_function) { // User touched the dialog's positive button Toast.makeText(this,"User clicked on Yes",Toast.LENGTH_SHORT).show(); if (aux_function == "SaveChanges") { SaveChanges(view,"Yes"); } else if (aux_function == "DismissChanges") { DismissChanges(view,"Yes"); } } @Override public void onDialogNegativeClick(DialogFragment dialog,String aux_function) { Toast.makeText(this,"User clicked on NO","No"); } else if (aux_function == "DismissChanges") { DismissChanges(view,"No"); } }
我的对话的.java(完整)
public class HH_Fragment_YesNo extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); String setMessage = getArguments().getString("setMessage"); final String callingFunction = getArguments().getString("callingFuntion"); builder .setMessage(setMessage) // R.string.dialog_fire_missiles .setPositiveButton("Sí",new DialogInterface.OnClickListener() // R.string.fire { public void onClick(DialogInterface dialog,int id) { // Exit without saving mListener.onDialogPositiveClick(HH_Fragment_YesNo.this,view,callingFunction); } }) .setNegativeButton("No",new DialogInterface.OnClickListener() // R.string.cancel { public void onClick(DialogInterface dialog,int id) { // User cancelled the dialog mListener.onDialogNegativeClick(HH_Fragment_YesNo.this,callingFunction); } }); // Create the AlertDialog object and return it return builder.create(); } /* The activity that creates an instance of this dialog fragment must * implement this interface in order to receive event callbacks. * Each method passes the DialogFragment in case the host needs to query it. */ public interface YesNoDialogListener { public void onDialogPositiveClick(DialogFragment dialog,String aux_Function); public void onDialogNegativeClick(DialogFragment dialog,String aux_Function); } // Use this instance of the interface to deliver action events YesNoDialogListener mListener; // Override the Fragment.onAttach() method to instantiate the NoticeDialogListener @Override public void onAttach(Activity activity) { super.onAttach(activity); // Verify that the host activity implements the callback interface try { // Instantiate the NoticeDialogListener so we can send events to the host mListener = (YesNoDialogListener) activity; } catch (ClassCastException e) { // The activity doesn't implement the interface,throw exception throw new ClassCastException(activity.toString() + " must implement NoticeDialogListener"); } } }
解决方法
完整的解决方案尝试这
1)创建接口
import android.content.DialogInterface; public interface AlertMagnatic { public abstract void PositiveMethod(DialogInterface dialog,int id); public abstract void NegativeMethod(DialogInterface dialog,int id); }
2)确认对话框的通用方法.
public static void getConfirmDialog(Context mContext,String title,String msg,String positiveBtnCaption,String negativeBtnCaption,boolean isCancelable,final AlertMagnatic target) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); int imageResource = android.R.drawable.ic_dialog_alert; Drawable image = mContext.getResources().getDrawable(imageResource); builder.setTitle(title).setMessage(msg).setIcon(image).setCancelable(false).setPositiveButton(positiveBtnCaption,new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int id) { target.PositiveMethod(dialog,id); } }).setNegativeButton(negativeBtnCaption,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int id) { target.NegativeMethod(dialog,id); } }); AlertDialog alert = builder.create(); alert.setCancelable(isCancelable); alert.show(); if (isCancelable) { alert.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface arg0) { target.NegativeMethod(null,0); } }); } }
3)如何使用
getConfirmDialog(getString(R.string.logout),getString(R.string.logout_message),getString(R.string.yes),getString(R.string.no),false,new AlertMagnatic() { @Override public void PositiveMethod(final DialogInterface dialog,final int id) {} @Override public void NegativeMethod(DialogInterface dialog,int id) { } });