Страницы

Поиск по вопросам

среда, 19 декабря 2018 г.

Как правильно передать аргументы в DialogFragment?

Мне нужно задать DialogFragment стиль, для этого я ему присвоил layout параметр. Идея такая, я могу вызывать этот DialogFragment из разных классов, передавая ему нужный мне layout. Так как в зависимости от вызывающего класса DialogFragment должен иметь соответствующий вид.
Я делаю это так, вот собственно класс DialogFragment
public class MyDialog extends DialogFragment { final String LOG_TAG = "MyDialog"; int layout;
// Здесь я принимаю входящие аргументы @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); Bundle args = this.getArguments(); layout = args.getInt("layout"); }
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity()) .setView(layout) .setCancelable(true);
return adb.create(); }
public void dismissDialog(final MyDialog dialog, int daleyTime) { Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { try { dialog.dismiss(); } catch (IllegalStateException e) { e.printStackTrace(); } } }, daleyTime); }
public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); Log.d(LOG_TAG, "MyDialog: onDismiss"); }
public void onCancel(DialogInterface dialog) { super.onCancel(dialog); Log.d(LOG_TAG, "MyDialog: onCancel"); } }
И вот как я передаю аргументы :
int daleyTimeFirst = 8 * 1000; MyDialog dialog = new MyDialog();
Bundle args = new Bundle(); args.putInt("key", R.layout.activity_dialog); dialog .setArguments(args);
dialog.show(getFragmentManager(), "dialog"); dialog.dismissDialog(dialog, daleyTimeFirst);
Когда я в классе MyDialog явно указываю какой layout использовать, то все работает, как только я передаю layout как аргумент, то ничего не происходит, в логе печатает только строчку
Log.d(LOG_TAG, "MyDialog: onDismiss");
Как проверить почему так происходит? Как это починить? Вроде все верно делаю.


Ответ

Достаете аргумент по ключу layout :
layout = args.getInt("layout");
Записываете аргумент по ключу key:
args.putInt("key", R.layout.activity_dialog);
Если вы записали key, то нужно и доставать key, а не layout

Комментариев нет:

Отправить комментарий