【问题标题】:How to use getActivity.getLayoutInflater() in custom dialog class如何在自定义对话框类中使用 getActivity.getLayoutInflater()
【发布时间】:2020-04-10 18:16:15
【问题描述】:

我为自定义对话框创建了一个类,并使用了 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>

【问题讨论】:

  • 将onCreateTextDialog() 方法中的所有内容移至DialogFragment 的onCreateDialog() 方法。您可以使用getActivity() 代替您的Context 参数。我不太确定onCreateTextDialog() 的用途是什么,但这有点表明您可能没有正确使用DialogFragment。
  • @MikeM。谢谢你的支持。我使用 BaseNavigator 所以我必须使用上下文参数。我创建 oncreatedialog 但我不能使用上下文
  • 我不知道BaseNavigator 是什么,也不知道为什么它会要求你在那里传递你自己的Context,但就目前而言,你的TextDialogFragment 并没有真正被用作DialogFragment。如果你 show() 是从 onCreateTextDialog() 返回的 PrettyDialog,那么你就得到了一个普通的旧 Dialog。相反,如果您尝试 show() 一个 TextDialogFragment 的实例,它将是一个空的 Dialog,而不是您在该方法中设置的 PrettyDialog。

标签: android dialog layout-inflater dialogfragment setcontentview


【解决方案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);

希望对你有帮助!

谢谢。

【讨论】:

  • 谢谢。但是这种方式打开布局没有对话框:/我想在 prettydialog 上打开布局
  • 这个视图充气器是你的对话框。所以,我不明白没有对话框如何打开布局?
  • 你能分享屏幕截图吗?
  • 我的对话框使用此方法“onCreateTextDialog”创建,并添加了带有布局的edittext。 (查看充气机将此布局添加到 prettydialog)我用布局更新帖子
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
相关资源
最近更新 更多