Страницы

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

вторник, 31 декабря 2019 г.

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

#java #android


Мне нужно задать 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");


Как проверить почему так происходит? Как это починить? Вроде все верно делаю.
    


Ответы

Ответ 1



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

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

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