如何创建自定义警报对话框,以便能够将输入的数据传递回 Android 中的呼叫活动?



在我的应用程序中,我希望用户能够做 3 件事:

  1. 打开一个对话框。
  2. 允许用户在该对话框中输入两个字符串。
  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 个目标?

  1. 打开一个对话框。

MyCustomDialogFragment实例上调用show(),传入FragmentManager.虽然框架DialogFragment已被弃用,但其JavaDocs显示了如何使用show()

  1. 允许用户在该对话框中输入两个字符串。

您的布局似乎提供了此功能,尽管您希望摆脱按钮,因为AlertDialog提供了这些按钮。

  1. 单击"确定"按钮,然后将两个字符串传递回调用活动。

拨打setPositiveButton()您的AlertDialog.Builder。让您传入的DialogInterface.OnClickListenersetPositiveButton()EditText小部件中获取值并将该数据获取到您的活动中(例如,在此片段和活动之间使用共享ViewModel,并在ViewModel中使用EditText内容更新片段LiveData)。

此示例应用程序显示了使用DialogFragment的基础知识,尽管使用自弃用的框架DialogFragment实现并且不使用ViewModel

相关内容

  • 没有找到相关文章

最新更新