对话片段 - 实现确定按钮和其他问题



我正在尝试实现一个相对简单的DialogFragment,它应该包含一个图像和一个确定按钮,我想从我的活动中按需显示它。

我通过 inflater.inflateonCreateView中设置了它的布局,但我无法弄清楚如何告诉它 OK 按钮事件处理程序的实现位于我的自定义 DialogFragment 类中。它似乎试图在活动中找到它,这不是我想要的。打电话给getDialog().dismiss()就足以驳回它吗?

以下是我在活动中创建对话框的方法:

ResponseDialog dialog = new ResponseDialog();
dialog.show(getFragmentManager(), "dialog_response_image");

另外,有些人说我的自定义对话片段应该设置getDialog().setCanceledOnTouchOutside(true);,但我应该在哪里设置。在onActivityCreated

如果我想设置活动所包含图像的来源,如何从活动访问其视图?

此外,由于某种原因,即使我使用静态宽度/高度,它也会填满整个显示器。有谁知道如何解决这个问题?- 我设法通过切换到LinearLayout而不是DialogFragment布局 XML 中的RelativeLayout来解决此问题......

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@color/background_color"
    tools:context=".MainActivity"
    android:layout_width="200dp"
    android:layout_height="400dp"
    android:id="@+id/dialogImageReponse" >
    <Button
        android:id="@+id/dialogButtonOk"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="@string/ok"
        android:onClick="Ok" />
</RelativeLayout>

我将尝试回答您的每个问题:

1.) 关于"如何告诉它 OK 按钮事件处理程序的实现位于我的自定义 DialogFragment 类中",我不确定你为什么要这样做,因为你还没有告诉我们。

2.) "调用 getDialog().dismiss() 是否足以消除它?"。如果你想从你的活动中关闭 DialogFragment,那么你只需要调用 dialog.dismiss() (这里的"dialog"指的是 ResponseDialog dialog = new ResponseDialog();所以很明显,你只能在创建 ResponseDialog 对象后调用 dialog.dismiss()。

3.) 关于 "getDialog().setCanceledOnTouchOutside(true);"再一次,你只需要打电话

dialog.setCanceledOnTouchOutside(true); 

紧接着:

ResponseDialog dialog = new ResponseDialog();
dialog.show(getFragmentManager(), "dialog_response_image");

4.) 您可以通过调用以下内容访问其视图:

View v = dialog.getView();

虽然如果你只是想设置它所包含的图像的来源,并且我假设你想使用存储在手机中的照片或图片,那么你将不得不像这样使用 ResponseDialog 的参数化构造函数,作为参数,你必须传递 URI 或你想要在对话片段中显示的图片的文件路径:

ResponseDialog dialog = new Response(String filepath);

然后在我的自定义对话框类(我理解为 ResponseDialog)中,您必须使用此文件路径(在构造函数中接收)来创建位图,然后将位图设置为该对话片段中 ImageView 的源。

最新更新