Вы должны перегруппировать код, который создает Dialog
в вспомогательном классе.Ниже приведена выдержка из DialogHelper
, который я создал для себя и который я использую для отображения файлов справки своих приложений.
public class DialogHelper {
public static AlertDialog showHelp(final Context ctx, final int resTitle, final int resFilename, final int resOk, final int resViewOnline, final int resOnlineUrl) {
final WebView webview = new WebView(ctx);
webview.loadUrl(ctx.getString(resFilename));
AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setTitle(resTitle)
.setView(webview)
.setCancelable(false)
.setPositiveButton(resOk, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
})
.setNegativeButton(resViewOnline, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
final Uri uri = Uri.parse(ctx.getString(resOnlineUrl));
final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
ctx.startActivity(intent);
}
}
);
final AlertDialog dlg = builder.create();
dlg.show();
return dlg;
}
}
... other kinds of dialog take place here ...
}
Таким образом, я просто звоню
DialogHelper.showHelp(context, R.string.helpTitle, R.string.localizedFilename, R.string.labelOk, R.string.labelViewOnlineHelp, R.string.onlineHelpUrl);
все мои заявки.Это много параметров, но это выполнимо.
В этом коде есть неприятная вещь: я использую setNegativeButton()
для чего-то другого, чем его предназначение.Это то, что я должен рефакторинг, но это ничего не меняет в подходе.
О параметрах showHelp()
: они final
, поскольку они используются в анонимных классах, построенных в методе.Это требование компилятора.