0

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

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

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

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

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

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

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

<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>
4

1 回答 1

1

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

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

2.) “调用 getDialog().dismiss() 是否足以解除它?”。如果你想从你的 Activity 中关闭 DialogFragment 那么你只需要调用 dialog.dismiss() (这里的'dialog' 是指 ResponseDialog dialog = new ResponseDialog(); 所以显然你只能调用 dialog.dismiss() 一旦你'已经创建了 ResponseDialog 对象。

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

dialog.setCanceledOnTouchOutside(true); 

紧随其后:

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

4.) 你可以通过调用来访问它的视图:

View v = dialog.getView();

尽管如果您只想设置要使用的图像的来源,并且我假设您想使用存储在手机中的照片或图片,那么您将不得不像这样为 ResponseDialog 使用参数化构造函数一个参数,您必须传递 URI 或您希望在 dialogfragment 中显示的图片的文件路径:

ResponseDialog dialog = new Response(String filepath);

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

于 2012-08-18T21:18:17.940 回答