如何在Android上重复使用AlertDialog for Yes / No?

前端之家收集整理的这篇文章主要介绍了如何在Android上重复使用AlertDialog for Yes / No?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试找到重用显示自定义标题的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) {

                    }
                });

猜你在找的Android相关文章