在我的应用程序中,我希望用户能够做三件事:
我正在尝试遵循示例Here,但效果不佳。
这就是我所拥有的:
<?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个目标?
那里有很多示例,但是它们都是默认Google示例的变体,并不是很全面。
答案 0 :(得分:1)
我怎样才能从上面实现我的3个目标?
- 打开一个对话框。
在您的show()
实例上调用MyCustomDialogFragment
,传入FragmentManager
。在the framework DialogFragment
is deprecated期间,其JavaDocs显示了如何使用show()
。
- 允许用户在该对话框中输入两个字符串。
尽管AlertDialog
提供了这些按钮,但您还是希望摆脱按钮的使用,您的布局似乎可以提供此功能。
- 单击“确定”按钮,并将两个字符串传递回呼叫活动。
Call setPositiveButton()
在您的AlertDialog.Builder
上。让您传递到DialogInterface.OnClickListener
的{{1}}从setPositiveButton()
小部件中获取值并将该数据获取到您的活动中(例如,在此片段和活动,并在EditText
中用ViewModel
的内容更新片段LiveData
。
This sample app显示了使用ViewModel
的基础知识,尽管使用的是自从弃用的框架EditText
的实现,而不是使用DialogFragment
。