gpt4 book ai didi

android - 如何在 Android 上重复使用 AlertDialog 表示是/否?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:44:01 26 4
gpt4 key购买 nike

我正在尝试找到重用显示自定义标题的对话框的方法,然后将“是/否”单击发送到启动该对话框的函数。

我有两个按钮,Save 和 Dismiss,它们都调用 Yes/No 对话框,一个显示“Do you want to save”,另一个显示“Dismiss changes?”。

我认为我的程序很“脏”,但我想它可以工作,但我的问题是“View view”变量,我不知道如何将它从 Activity 传递到 Dialog,所以我可以使用它调用启动对话框的函数。

提前致谢,赫尔尼德兹

我的 Activity 的 .java(它的 fragment )

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, "Save changes?", "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, String aux_YesNo)
{
if (aux_YesNo == "")
{
Toast.makeText(this, "Dismiss changes?", Toast.LENGTH_SHORT).show();
open_HH_Fragment_YesNo(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, View view, String aux_function)
{
Toast.makeText(this, "User clicked on NO", Toast.LENGTH_SHORT).show();

if (aux_function == "SaveChanges")
{
SaveChanges(view, "No");
}
else if (aux_function == "DismissChanges")
{
DismissChanges(view, "No");
}
}

我的Dialog的.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, view, 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, View view, String aux_Function);
public void onDialogNegativeClick(DialogFragment dialog, View view, 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) 创建接口(interface)

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 - 如何在 Android 上重复使用 AlertDialog 表示是/否?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18413925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com