Я знаю, что об этом спрашивали некоторое время назад, но вот довольно хорошее решение, которое я нашел.
Я определяю интерфейс следующим образом:
public interface OpenDialog {
public void showDialog(DialogFragment dialog);
}
Который затем реализует мое действие, передавая ссылку на себя диалоговому окну при его открытии, используя мой класс InterfaceHolder:
public class MyActivity extends FragmentActivity implements OpenDialog {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
InterfaceHolder.set(this);
showDialog(new DialogOne());
}
public void showDialog(DialogFragment dialog) {
dialog.show(getSupportFragmentManager(), "tag");
}
InterfaceHolder - это просто класс со статической ссылкой на интерфейс, который я использую для его передачи:
public class InterfaceHolder {
private static OpenDialog openDialog;
public void set(OpenDialog openDialog)
this.openDialog = openDialog;
}
public void get()
return openDialog;
}
Таким образом, метод showDialog отобразит любой диалог, который я передам в него; как вы видите, я делаю это для отображения DialogOne. Теперь, если я хочу открыть новый диалог под названием «DialogTwo» внутри «DialogOne», я могу вызвать его, написав:
InterfaceHolder.get().showDialog(new DialogTwo());
dismiss();
И вуаля, DialogTwo показывается. Очевидно, что вы должны быть осторожны, чтобы убедиться, что ссылка на вашу деятельность была передана в InterfaceHolder (хороший способ сделать это - поместить InterfaceHolder.set (this); в метод showDialog), но в противном случае это работает красиво.