我正在尝试实现一个相对简单的DialogFragment
,它应该包含一个图像和一个OK按钮,我希望根据我的活动显示它。
我通过onCreateView
在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>
答案 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的源。