DialogFragment - 实现确定按钮和其他问题

时间:2012-08-18 20:35:57

标签: android dialog

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

我通过onCreateViewinflater.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>

1 个答案:

答案 0 :(得分:1)

我会尽力回答你的每一个问题:

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

2。)“调用getDialog()。dismiss()是否足以解雇它?”如果你想从你的Activity中解除DialogFragment,那么你只需要调用dialog.dismiss()('dialog'在这里指的是ResponseDialog对话框=新的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的参数化构造函数这个和作为参数你必须传递你想要在dialogfragment中显示的图片的URI或文件路径:

ResponseDialog dialog = new Response(String filepath);

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