如何重用android alertdialog
我想重用alertDialog的代码,并将其作为函数调用放在另一个java文件中。但是“this”不能代替“MyActivity.this”?如何将其作为参数传递?如果代码是泛型的,则最好如何重用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 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"));