2015-03-29 6 views
0

В mainActivity У меня естьAlertDialog из другого класса

public void showDialog(String title, String message, String accept, String denied){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
    builder.setTitle(title); 
    builder.setMessage(message); 
    builder.setCancelable(true); 

    builder.setPositiveButton(accept, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 

    builder.setNegativeButton(denied, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 

    builder.create().show(); 
} 

Он работает внутри основной деятельности, но я TRAING вызов это от другой деятельности, поэтому я написал

MainActivity o = new MainActivity(); 
o.showDialog("t", "t", "t", "t"); 

И приложение врезаться. Я попробовал также написать «this», «getAplicationContext()» вместо «MainActivity.this».

+0

Можете ли вы предоставить stacktrace или Exception, которые вы получаете из logcat? –

+0

http://i.imgur.com/uPLAfGP.png –

ответ

0

Он работает внутри основной деятельности, но я TRAING вызов это от другого деятельности, поэтому я написал

MainActivity O = новый MainActivity(); o.showDialog ("t", "t", "t", "t");

Вы не должны использовать оператора new на классах, которые распространяются на Activity. Возвращаясь к вашей проблеме, мне кажется, что вы хотите свести к минимуму повторяющийся код. Одним из способов, в вашем случае может быть класс утилиты, который содержит ваш метод showDialog. Его подпись будет немного отличаться, потому что вам нужен Context объект для конкретизации строитель:

public final class Utility { 

public static void showDialog(Context context, String title, String message, String accept, String denied){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder.setTitle(title); 
    builder.setMessage(message); 
    builder.setCancelable(true); 

    builder.setPositiveButton(accept, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 

    builder.setNegativeButton(denied, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 

    builder.create().show(); 
} 

private Utility() {} 
} 

Отметим также, что класс Utility, имеет private default constructor, что означает, что вы не можете явно создать его экземпляр.

и вы можете использовать как:

Utility.showDialog(ActivityName.class, "aa", "bb", "cc", "dd"); 
+0

Деятельность secend распространяется от MainActivity, а не Activity. Может быть, это и есть причина? –

+0

no it not., В этом случае вы должны иметь возможность называть 'showDialog', не создавая экземпляр MainActivity. Просто напишите 'showDialog (« aa »,« bb »,« cc »,« dd »);' в вашей 'SecondActivity' и он должен работать – Blackbelt

+0

Но не работает :(И я не могу использовать ActivityName.class, потому что метод требует контекста и предлагает мне изменить контекст на какой-то класс MainActivity –

0

+1 для ответа Blackbelt в.

Но просто для того, чтобы следить за тем, как OP хочет использовать его в другом действии, вы использовали бы его в другом действии, подобном этому. Скажите, что вы хотели использовать его в деятельности под названием SecondActivity: Utility.showDialog(SecondActivity.class, "aa", "bb", "cc", "dd");

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