Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何重用android alertdialog_Android_This_Android Alertdialog_Code Reuse - Fatal编程技术网

如何重用android alertdialog

如何重用android alertdialog,android,this,android-alertdialog,code-reuse,Android,This,Android Alertdialog,Code Reuse,我想重用alertDialog的代码,并将其作为函数调用放在另一个java文件中。但是“this”不能代替“MyActivity.this”?如何将其作为参数传递?如果代码是泛型的,则最好 AlertDialog alertDialog = new AlertDialog.Builder(MyActivity.this).create(); alertDialog.setTitle("Alert"); alertDialog.setMess

我想重用alertDialog的代码,并将其作为函数调用放在另一个java文件中。但是“this”不能代替“MyActivity.this”?如何将其作为参数传递?如果代码是泛型的,则最好

    AlertDialog alertDialog = new AlertDialog.Builder(MyActivity.this).create();
            alertDialog.setTitle("Alert");
            alertDialog.setMessage("Alert message to be shown");
            alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
            alertDialog.show();

您可以在单独的类中使用类似的内容,例如,我使用了
AlertUtils.java

public class AlertUtils
{
    public static void showOKDialog(Context context, String title, String message)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(title);
        builder.setMessage(message);
        builder.setPositiveButton(android.R.string.ok, null);
        builder.show();
    }
}
在这个方法中,您传递的
上下文可以是您的活动的this,例如:
MyActivity.this
或片段的
getContext()

AlertUtils.showOKDialog(MyActivity.this,“对话框标题”,“要在对话框中显示的消息”)

活动中
,您可以通过


newutils().showDialog(MyActivity.this)

您可以在一个类中单独编写警报对话框代码,如下所示:

public class Utils{
  public static void showMessage(final Activity activity, String title, String posText){

    MaterialDialog dialog = new MaterialDialog.Builder(activity)
            .content(title)
            .positiveText(posText)
            .onPositive(new MaterialDialog.SingleButtonCallback() {
                @Override
                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {

                    dialog.dismiss();
                }
            })
            .build();
    dialog.show();

}
}
根据您的活动/片段,您可以将其称为:

活动

AppUtils.showMessage(this, getString("your text"), getString("your text"));
碎片

AppUtils.showMessage(getActivity(),getString("your text"), getString("your text"));
在片段或活动中导入Utils类,那么一切都将完美工作


希望这有助于您解决问题。

这是一个上下文,您可以发送一个上下文以重用它:new AlertDialog.Builder(context.create()为什么我不能使用getapplicationContext()因为这比使用MyActivity.this更通用,它必须在每个java/项目文件中进行更改。只需将您的showDialog设置为
静态
@Enzokie,您能解释一下原因吗?或者你能给我一些关于它的有用链接,第二,如果你能使你的showDIalog成为静态的;您可以简单地这样做
Utils.showDialog(..)
及其方式更简洁。为什么我不能使用getapplicationContext(),因为它比使用MyActivity更通用。这将在每个java/项目文件中都必须更改。这是一个更可接受的解决方案,只是我必须完全重构活动名称。代码足够通用。这里有一个很好的解释,说明了不同类型的上下文以及它们可以提供什么:向下滚动到接近一半的上下文兼容性部分。基本上,
applicationContext
没有显示对话框的功能。活动上下文是唯一可以显示对话框的上下文。您可以测试运行代码吗?从活动传递“this”将具有error@DriveCarefully我在我的应用程序中使用了相同的代码。。它工作正常。如果它给您带来问题,您可以尝试“youractivity.this”而不是“this”。因为代码包含其他项,例如MaterialDialog,所以我无法对其进行测试。但我们似乎可以传递活动而不是上下文。有什么区别吗?
AppUtils.showMessage(getActivity(),getString("your text"), getString("your text"));