在我的应用程序中,我希望用户能够做 3 件事:
- 打开一个对话框。
- 允许用户在该对话框中输入两个字符串。
- 单击"确定"按钮,然后将两个字符串传递回调用活动。
我试图遵循这里的例子,但进展不顺利。
这是我所拥有的:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="Some Text Here"
android:textSize="18sp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
style="@style/my_custom_style"
android:text="From: "
android:labelFor="@+id/from"/>
<EditText
android:id="@+id/from"
style="@style/my_custom_style"
android:inputType="date"/>
<TextView
style="@style/my_custom_style"
android:text="To: "
android:labelFor="@+id/to"/>
<EditText
android:id="@+id/to"
style="@style/my_custom_style"
android:inputType="date"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_gravity="end"
android:orientation="horizontal">
<Button
android:id="@+id/button_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cancel"/>
<Button
android:id="@+id/button_okay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/okay"/>
</LinearLayout>
</LinearLayout>
这是我扩展DialogFragment
的课程:
public class MyCustomDialogFragment extends DialogFragment
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
LayoutInflater layoutInflater = getActivity().getLayoutInflater();
alertDialogBuilder.setView(layoutInflater.inflate(R.layout.my_custom_layout, null));
return alertDialogBuilder.create();
}
}
现在,在我的呼叫活动中,我正在尝试这样做:
MyCustomDialogFragment myCustomDialogFragment = new MyCustomDialogFragment();
// Since the onCreate() method of my custom DialogFragment returns an android.app.Dialog, I thought I could do this:
Dialog dialog = new CustomDialogFragment();
当然,这确实有效,我得到:
Incompatible types.
Required: android.app.Dialog
Found: com.me.MyCustomDialogFragment
错误,即使onCreate()
方法确实返回android.app.Dialog
.我什至不能把它投到Dialog
.那么,我怎样才能从上面实现我的 3 个目标呢?
那里有"很多"例子,但它们都只是默认谷歌示例的变体,这不是很彻底。
如何从上面实现我的 3 个目标?
- 打开一个对话框。
在MyCustomDialogFragment
实例上调用show()
,传入FragmentManager
.虽然框架DialogFragment
已被弃用,但其JavaDocs显示了如何使用show()
。
- 允许用户在该对话框中输入两个字符串。
您的布局似乎提供了此功能,尽管您希望摆脱按钮,因为AlertDialog
提供了这些按钮。
- 单击"确定"按钮,然后将两个字符串传递回调用活动。
拨打setPositiveButton()
您的AlertDialog.Builder
。让您传入的DialogInterface.OnClickListener
setPositiveButton()
从EditText
小部件中获取值并将该数据获取到您的活动中(例如,在此片段和活动之间使用共享ViewModel
,并在ViewModel
中使用EditText
内容更新片段LiveData
)。
此示例应用程序显示了使用DialogFragment
的基础知识,尽管使用自弃用的框架DialogFragment
实现并且不使用ViewModel
。