Как использовать пользовательский диалог во всех моих приложениях в Android - PullRequest
0 голосов
/ 30 августа 2011

У меня есть диалог, и у меня есть много действий ... Мне нужно вызывать один и тот же dailog во всех действиях ... В настоящее время я написал код для каждого из действий, но это не правильный путь ... Может ли кто-нибудь помочь мне в этом

Ответы [ 3 ]

1 голос
/ 30 августа 2011

Просто создайте класс и в нем создайте статический метод (скажем, displayDialog), а внутри него скопируйте и вставьте код, отображающий ваше диалоговое окно.Теперь вызовите этот статический метод из любой точки вашего проекта.Но вам, возможно, придется передать контекст вызывающего действия статическому методу.

public class dialogClass {

static Dialog dialog=null;
public static void exitApp_Dialog(Context context,String title,String message){

     AlertDialog.Builder alertbox = new AlertDialog.Builder(context);
      alertbox.setTitle("Warning");
     alertbox.setMessage("Exit Application?");
     alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface arg0, int arg1) {
             activity.finish();
         }
     });
     alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {
         public void onClick(DialogInterface arg0, int arg1) {

         } 
     });
     alertbox.show();
}
}
0 голосов
/ 30 августа 2011

Вы должны перегруппировать код, который создает 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, поскольку они используются в анонимных классах, построенных в методе.Это требование компилятора.

0 голосов
/ 30 августа 2011

Хорошо, ниже мой способ реализации диалога в статическом классе, поэтому я могу вызывать его из любого действия, когда мне нужно

public static void showProgressDialog(Context mContext, String text, boolean cancellable)
{
    removeDialog();
    mDialog = new Dialog(mContext, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
    mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    LayoutInflater mInflater = LayoutInflater.from(mContext);
    View layout = mInflater.inflate(R.layout.popup_example, null);
    mDialog.setContentView(layout);

    TextView mTextView = (TextView) layout.findViewById(R.id.text);
    if (text.equals(""))
        mTextView.setVisibility(View.GONE);
    else
        mTextView.setText(text);

    mDialog.setOnKeyListener(new DialogInterface.OnKeyListener()
    {
        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event)
        {
            switch (keyCode)
            {
            case KeyEvent.KEYCODE_BACK:
                return true;
            case KeyEvent.KEYCODE_SEARCH:
                return true;
            }
            return false;

        }
    });

    mDialog.setCancelable(cancellable);

    mDialog.show();
}

public static void removeDialog()
{
    if (mDialog != null)
        mDialog.dismiss();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...