2016-07-05 3 views
2

Я хочу повторно использовать код для alertDialog и поместить его в другой java-файл в качестве вызова функции. Но «это» нельзя использовать для замены «MyActivity.this»? Как передать его в качестве параметра? Лучше всего, если код является общим.как повторно использовать android alertdialog

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(); 
+0

Это контекст, вы можете отправить контекст для его повторного использования: new AlertDialog.Builder (context) .create() –

+0

Почему я не могу использовать getapplicationContext(), поскольку это будет более общим, чем использование MyActivity.this, которое будет иметь для изменения в каждом файле java/project. – DriveCarefully

ответ

2

Вы можете использовать что-то вроде этого в отдельном классе, например, я использовал 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(); 
    } 
} 

В этом методе Context вы проходите через может быть ваша активность: Вот, например: MyActivity.this или осколком getContext()

AlertUtils.showOKDialog(MyActivity.this, "title of dialog", "message to display in dialog");

+0

Почему я не могу использовать getapplicationContext(), поскольку это будет более общим, чем использование MyActivity.this, которое должно быть изменено в каждом файле java/project. – DriveCarefully

+0

Это более приемлемое решение, за исключением того, что мне нужно полностью реорганизовать имя действия. Код достаточно общий. – DriveCarefully

+0

Существует хорошее объяснение различных типов контекста и того, что они могут предоставить здесь: [Контекстные совместимости] (https://possiblemobile.com/2013/06/context/) Прокрутите вниз до раздела «Контекстные совместимости» около половины пути вниз. В принципе, 'applicationContext' не имеет возможности отображать диалоги. Контекст активности - это единственный контекст, который может отображать диалог. – behelit

0
public class Utils { 
    public void showDialog(Context context) { 
     AlertDialog alertDialog = new AlertDialog.Builder(context).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(); 
    } 
} 

В вашем Activity, вы можете использовать диалоговое окно показать на

new Utils().showDialog(MyActivity.this);

+0

Неплохая идея инициализировать класс только для использования. Просто сделайте showDialog «статическим». – Enzokie

+0

@ Enzokie Можете ли вы объяснить, почему? или вы можете дать мне полезную ссылку о нем –

+0

[Таким образом, вам не следует создавать экземпляры объектов, которые вам не нужны] (https://developer.android.com/training/articles/perf-tips.html), второй если вы можете сделать showDIalog статичным; вы можете просто сделать это так: «Utils.showDialog (....)» и его способ чище. – Enzokie

0

Вы можете написать уведомление код диалога отдельно в классе, как показано ниже:

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 класс как фрагмент или деятельности, то все будет работать отлично.

Надеюсь, это поможет вам избавиться от вашей проблемы.

+0

Можете ли вы проверить запуск кода? прохождение «этого» из действия будет иметь ошибку – DriveCarefully

+0

@DriveПосле того, как я использую этот же код в своем приложении, он работает отлично. Если это дает вам проблему, вы можете попробовать «youractivity.this» вместо этого. – Riten

+0

Поскольку коды содержат другие элементы, такие как MaterialDialog, поэтому я не могу выполнить некоторые тесты. Но, похоже, мы можем передавать активность Activity вместо контекста контекста. Есть ли разница? – DriveCarefully

Смежные вопросы