Как использовать getActivity.getLayoutInflater() в пользовательском диалоговом классе

Я создаю класс для пользовательского диалога и использую PrettyDialog. Я хочу редактировать текст в диалоге. Я использую Inflater, но ошибка: getActivity -> mHost: null. Я попытался создать метод getTextDialogFragment(), затем ошибка getLayoutInflater mHost null. Что я могу сделать, чтобы это исправить? ТекстДиалогФрагмент:

 public class TextDialogFragment extends DialogFragment {
        private EditText edtDialog;
        public interface SingleChoiceListener{
            void onPositiveButtonClicked();
            void onNegativeButtonClicked();
        }
        TextDialogFragment.SingleChoiceListener mListener;


        @NonNull
        public PrettyDialog onCreateTextDialog(Context context) {
            PrettyDialog prettyDialog = new PrettyDialog(context);
            LayoutInflater inflater=getActivity().getLayoutInflater();
            View view=inflater.inflate(R.layout.dialog_text,null);
            prettyDialog.setContentView(view);
            prettyDialog.setMessage("sdf");
            prettyDialog.setIcon(R.drawable.question_icon);
            prettyDialog.setCanceledOnTouchOutside(false);
            prettyDialog.addButton("EVET", R.color.pdlg_color_white, R.color.pdlg_color_green, new PrettyDialogCallback() {
                @Override
                public void onClick() {
                    mListener.onPositiveButtonClicked();
                    prettyDialog.dismiss();
                }
            });
            prettyDialog.addButton("HAYIR", R.color.pdlg_color_white, R.color.pdlg_color_red, new PrettyDialogCallback() {
                @Override
                public void onClick() {
                    mListener.onNegativeButtonClicked();
                    prettyDialog.dismiss();
                }
            });
            edtDialog=view.findViewById(R.id.edtDialog);
            prettyDialog.show();
            return prettyDialog;
        }
        public void setListener(TextDialogFragment.SingleChoiceListener singleChoiceListener){
            mListener=singleChoiceListener;
        }
    }

этот макет, который я хочу добавить в диалог. Диалог должен работать edittext+prettydialog:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:layout_margin="8dp">
    <EditText
        android:id="@+id/edtDialog"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@null"
        android:focusable="true"
        android:hint="Giriş yapınız"
        android:gravity="center"
        android:imeOptions="actionDone"
        android:inputType="text"
        android:textColor="@android:color/black"
        android:textColorHint="@android:color/darker_gray"
        android:textSize="40sp">

    </EditText>
</RelativeLayout>

person CEng    schedule 18.12.2019    source источник
comment
Переместите все из вашего метода onCreateTextDialog() в метод onCreateDialog() DialogFragment. Вы можете использовать getActivity() вместо параметра Context. Я не совсем уверен, для чего предназначено onCreateTextDialog(), но это как бы предполагает, что вы, возможно, неправильно используете DialogFragment.   -  person Mike M.    schedule 18.12.2019
comment
@МайкМ. спасибо за вашу поддержку. Я использую BaseNavigator, поэтому мне нужно использовать параметр контекста. Я создаю oncreateddialog, но не могу использовать с контекстом   -  person CEng    schedule 18.12.2019
comment
Я не знаю, что такое BaseNavigator и почему это требует, чтобы вы передавали туда свой собственный Context, но в настоящее время ваш TextDialogFragment на самом деле не используется как DialogFragment. Если вы show() PrettyDialog вернулись из onCreateTextDialog(), то у вас просто старый добрый Dialog. Если вместо этого вы попытаетесь show() создать экземпляр TextDialogFragment, это будет пустой Dialog, а не PrettyDialog, который вы настраиваете в этом методе.   -  person Mike M.    schedule 18.12.2019


Ответы (1)


Попробуйте код ниже

View view=LayoutInflater.from(context).inflate(R.layout.dialog_text,null);

Вместо

LayoutInflater inflater=getActivity().getLayoutInflater();
View view=inflater.inflate(R.layout.dialog_text,null);

Я надеюсь это тебе поможет!

Спасибо.

person Hardik Talaviya    schedule 18.12.2019
comment
Спасибо. Но таким образом открыть макет без диалога: / Я хочу открыть макет на prettydialog - person CEng; 18.12.2019
comment
Этот вид надувания - ваш диалог. Итак, я не понимаю без диалога, как открыть макет? - person Hardik Talaviya; 18.12.2019
comment
Можешь поделиться скриншотом? - person Hardik Talaviya; 18.12.2019
comment
Мой диалог создается с помощью этого метода onCreateTextDialog, и я добавляю текст редактирования с макетом. (просмотреть надуватель, добавить этот макет в симпатичный диалог) Я обновляю пост с макетом - person CEng; 18.12.2019