Android 警报对话框教程:使用时间选择器、日期选择器和列表对话框





5.00/5 (4投票s)
Android 警报对话框教程:使用时间选择器、日期选择器和列表对话框。在本教程中,我们将讨论如何在 Android 应用程序中使用对话框和警报。对话框是向用户显示的一个小型弹出窗口,用于获取用户的额外信息或要求用户做出决定。警报
在本教程中,我们将讨论如何在 Android 应用程序中使用对话框和警报。
对话框是向用户显示的一个小型弹出窗口,用于获取用户的额外信息或要求用户做出决定。Android 中的警报对话框可以用作确认警报,例如当用户删除某些内容时,如下图所示。
它还可以用于在 Android 应用程序中获取一些信息或在您的 Android 应用程序中创建自定义对话框。我们将讨论三个类:AlertDialog
、DatePickerDialog
和 TimePickerDialog
。所有这些类都扩展了基类 Dialog
。
AlertDialog
可以显示标题、三个按钮、项目列表或任何自定义布局。
DatePickerDialog
和 TimePickerDialog
具有预定义的 UI,允许用户分别选择日期和时间。


我们将使用 DialogFragment
来创建对话框。DialogFragment
类提供了创建和管理 Dialog
对象所需的一切。
必备组件
- 我们希望您已安装 Android Studio。
- 另外,在学习本教程之前,我们建议您制作一个简单的 Hello World 应用程序并将其运行在您的智能手机上。
现在让我们创建我们的警报对话框应用程序。首先在 Android Studio 中创建一个新项目,如下所示。
创建新项目
请按照以下步骤操作
- 打开 Android Studio,然后通过转到文件 => 新建 => 新建项目来创建一个新项目。将应用程序名称输入为
AlertDialog
和您的公司域名。(我们使用了我们的公司域名,即 androidtutorialpoint.com。同样,您也可以使用您的域名)。 - 点击下一步并选择最低 SDK。我们保留了默认设置并点击下一步。
- 选择空活动并点击下一步。
- 在下一个屏幕中,将活动名称输入为 MainActivity,并记住勾选“生成布局”按钮,然后点击完成。
Gradle 将同步项目并解决所有依赖项。
带有一个按钮的警报对话框
创建一个新的 Java 类 SingleButtonFragment.java
并放入以下代码。
SingleButtonFragment.java
package com.androidtutorialpoint.alertdialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
public class SingleButtonFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_single_button)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getActivity(),"You clicked yes",Toast.LENGTH_SHORT).show();
}
});
return builder.create();
}
}
此类扩展了 DialogFragment
。如上所述,它提供了管理 AlertDialog
的方法。onCreateDialog()
是一个回调方法,用于实例化并返回一个 Dialog
类对象。
AlertDialog.Builder
类允许您创建带有此类内容(包括自定义布局)的 AlertDialog。
在本教程中,我们将使用此类中的以下方法。
setMessage()
– 将给定的资源 ID 设置为向用户显示的消息。setPositiveButton()
– 设置按下肯定按钮时调用的监听器。肯定按钮表示指向肯定响应的按钮,例如 - 确定或是按钮。setNegativeButton()
– 设置按下否定按钮时调用的监听器。否定按钮表示指向否定响应的按钮,例如 - 取消或否按钮。setNeutralButton()
– 设置按下中性按钮时调用的监听器。中性按钮表示指向中性响应的按钮,例如 - 稍后提醒我或不知道之类的响应。
在 SingleButtonFragment
中,我们只有一个肯定按钮,点击该按钮会显示一条肯定消息。请注意,当按钮被按下时,我们只是显示一条消息,通常您会根据按下的按钮执行一些操作。
带两个按钮的警报对话框
创建一个新的 Java 类 TwoButtonFragment.java 并放入以下代码。
TwoButtonFragment.java
package com.androidtutorialpoint.alertdialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
public class TwoButtonFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_two_button)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getActivity(),"You clicked Yes !!",Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getActivity(),"You clicked No !!",Toast.LENGTH_SHORT).show();
}
});
return builder.create();
}
}
此类的代码几乎与 SingleButtonFragment.java 类似,但是,我们添加了一个否定按钮以执行一些否定操作或显示否定消息。
单击肯定按钮时显示肯定消息,而单击否定按钮时显示否定消息。同样,我们只是出于演示目的显示消息,您可以根据按下的按钮执行一些操作。
带三个按钮的警报对话框
创建一个新的 Java 类 ThreeButtonFragment.java 并放入以下代码。
ThreeButtonFragment.java
package com.androidtutorialpoint.alertdialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
public class ThreeButtonFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_three_button)
.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getActivity(),"You clicked Yes <img alt="🙂" class="wp-smiley" src="https://s.w.org/images/core/emoji/72x72/1f642.png" style="height: 1em; max-height: 1em;" /> !! \n You will Get Latest Updates ",Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getActivity(),"You clicked No <img alt="🙁" class="wp-smiley" src="https://s.w.org/images/core/emoji/72x72/1f641.png" style="height: 1em; max-height: 1em;" /> !! \n Please subscribe to Get Latest Updates ",Toast.LENGTH_SHORT).show();
}
})
.setNeutralButton(R.string.remind, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getActivity(),"You clicked Remind Me Later !! \n We will Remind you later ",Toast.LENGTH_SHORT).show();
}
});
return builder.create();
}
}
这个类再次类似于 SingleButtonFragment.java,但是我们添加了一个否定按钮和一个中立按钮。
点击肯定按钮时显示肯定消息,而点击否定按钮时显示否定消息。此外,还有一个中性按钮可以给出中性响应。
带有单选列表的警报对话框
创建一个新的 Java 类 SingleChoiceListFragment.java 并放入以下代码。
SingleChoiceListFragment.java
package com.androidtutorialpoint.alertdialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
public class SingleChoiceListFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.pick_dish)
.setItems(R.array.dish_array, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// The 'which' argument contains the index position
// of the selected item
Toast.makeText(getActivity(), "You clicked " + getResources().getStringArray(R.array.dish_array)[which], Toast.LENGTH_SHORT).show();
}
});
return builder.create();
}
}
在此类中,我们使用 setItems()
创建一个单选列表。这里只需要设置标题,而不是设置消息。为此,我们使用 setTitle()
函数。
在 setItems()
中,我们传递数组的资源 ID 并设置 OnClickListener()
方法,一旦用户点击其中一个选项,就会调用此监听器。点击项的索引存储在 int 参数 which 中。
在这里,我们通过使用数组中的索引 which 访问用户点击的元素来显示该元素。
getResources().getStringArray(R.array.dish_array)[which]
在 values 文件夹下创建一个资源文件 arrays.xml 并放入以下内容。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="dish_array">
<item>Pizza</item>
<item>Pasta</item>
<item>Sandwich</item>
</string-array>
</resources>
带单选按钮列表的警报对话框
创建一个新的 Java 类 SingleChoiceRadioButtonListFragment.java 并放入以下代码。
SingleChoiceRadioButtonListFragment.java
package com.androidtutorialpoint.alertdialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
public class SingleChoiceRadioButtonListFragment extends DialogFragment {
private int mSelectedItem;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.pick_dish)
.setSingleChoiceItems(R.array.dish_array, 0,
new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
mSelectedItem = which;
}
})
// Set the action buttons
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getActivity(), "You selected !! \n " + getResources().getStringArray(R.array.dish_array)[mSelectedItem], Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getActivity(), "You clicked Cancel \n No Item was selected !!", Toast.LENGTH_SHORT).show();
}
});
return builder.create();
}
}
在此类中,我们使用 setSingleChoiceItems()
创建一个带有单选按钮的单选列表。第一个参数是数组资源,接下来是默认选中的项的位置,如果指定 -1 则不会选中任何项。第三个参数是 OnClickListener()
,当用户点击该项时会调用它。这里我们只是将局部变量 mSelectedItem
设置为所选的索引。
我们添加了肯定按钮和否定按钮。点击肯定按钮时,会显示所选项目。点击取消按钮时,会显示一条吐司消息,表示未选择任何项目。
带有复选框多选列表的警报对话框
创建一个新的 Java 类 MultipleChoiceCheckBoxListFragment.java 并放入以下代码。
MultipleChoiceCheckBoxListFragment.java
package com.androidtutorialpoint.alertdialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;
import java.lang.reflect.Array;
import java.util.ArrayList;
public class MultipleChoiceCheckBoxListFragment extends DialogFragment {
private ArrayList<Integer> mSelectedItems;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
mSelectedItems = new ArrayList(); // Where we track the selected items
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Set the dialog title
builder.setTitle(R.string.pick_dish)
// Specify the list array, the items to be selected by default (null for none),
// and the listener through which to receive callbacks when items are selected
.setMultiChoiceItems(R.array.dish_array, null,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
if (isChecked) {
// If the user checked the item, add it to the selected items
mSelectedItems.add(which);
} else if (mSelectedItems.contains(which)) {
// Else, if the item is already in the array, remove it
mSelectedItems.remove(Integer.valueOf(which));
}
}
})
// Set the action buttons
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// User clicked OK, so save the mSelectedItems results somewhere
// or return them to the component that opened the dialog
String s = "";
for(int i:mSelectedItems){
s += getResources().getStringArray(R.array.dish_array)[i];
s +="\n";
}
Toast.makeText(getActivity(), "You selected !! \n "+s, Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getActivity(), "You clicked Cancel \n No Item was selected !!", Toast.LENGTH_SHORT).show();
}
});
return builder.create();
}
}
在此类中,我们使用 setMultiChoiceItems()
创建带有复选框的多选列表。同样,第一个参数是数组资源,第二个参数指定默认选中的项,null 表示不选中所有复选框。第三个参数是 OnClickListener()
,当用户点击该项时会调用它。我们将项添加到 Integer 类型的 ArrayList 中。
我们添加了肯定按钮和否定按钮。点击肯定按钮时,会显示所有选中的项目。点击取消按钮时,会显示一条吐司消息,表示未选择任何项目。
使用 DatePicker
日期选择器用于通过显示日历视图(如上面视频所示)允许用户选择日期(月、日、年)。日期选择器用于旅行应用程序中选择登机日期,在提醒应用程序中选择提醒日期以及许多其他应用程序中。
在本教程中,我们将在布局文件中使用 DatePicker 小部件,然后膨胀该视图以获取 DatePicker 对话框。
创建一个新的布局文件 dialog_date.xml 并添加以下代码。
dialog_date.xml
<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_date_date_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
DatePickerFragment.java
package com.androidtutorialpoint.alertdialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.DatePicker;
import java.util.Date;
import java.util.GregorianCalendar;
public class DatePickerFragment extends DialogFragment {
private DatePicker datePicker;
public interface DateDialogListener {
void onFinishDialog(Date date);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
View v = LayoutInflater.from(getActivity())
.inflate(R.layout.dialog_date,null);
datePicker = (DatePicker) v.findViewById(R.id.dialog_date_date_picker);
return new android.support.v7.app.AlertDialog.Builder(getActivity())
.setView(v)
.setTitle(R.string.date_picker_title)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int year = datePicker.getYear();
int mon = datePicker.getMonth();
int day = datePicker.getDayOfMonth();
Date date = new GregorianCalendar(year,mon,day).getTime();
DateDialogListener activity = (DateDialogListener) getActivity();
activity.onFinishDialog(date);
dismiss();
}
})
.create();
}
}
首先,我们加载 dialog_date.xml。然后引用 datePicker
。然后我们创建并返回一个向用户显示的 AlertDialog
。我们使用 setView()
方法来设置加载的视图。当用户点击 DatePicker 对话框的“确定”按钮时
首先,我们从 datePicker
中选择年、月和日,然后我们创建一个日期对象并使用选择的值对其进行初始化。我们还将事件传递给宿主活动,在我们的例子中是 MainActivity
。
为此,我们定义了一个接口 DateDialogListener
,其中包含每种点击事件类型的方法。然后在将从对话框接收操作事件的宿主活动中实现该接口。
我们稍后在讨论 MainActivity
代码时会谈到实现 DateDialogListener
。
使用 TimePicker
时间选择器用于通过显示时钟类型视图(如上面视频所示)允许用户选择时间(小时、分钟)。时间选择器主要用于闹钟或提醒应用程序中。
对于 TimePicker,我们也将使用布局文件中的 TimePicker 小部件,然后膨胀该视图以获取 TimePicker 对话框。
创建一个新的布局文件 dialog_time.xml 并添加以下代码。
dialog_time.xml
<TimePicker xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_time_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
TimePickerFragment.java
package com.androidtutorialpoint.alertdialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TimePicker;
public class TimePickerFragment extends DialogFragment {
private TimePicker timePicker;
public interface TimeDialogListener {
void onFinishDialog(String time);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
View v = LayoutInflater.from(getActivity())
.inflate(R.layout.dialog_time,null);
timePicker = (TimePicker) v.findViewById(R.id.dialog_time_picker);
return new android.support.v7.app.AlertDialog.Builder(getActivity())
.setView(v)
.setTitle(R.string.time_picker_title)
.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int hour = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
hour = timePicker.getHour();
}else{
hour = timePicker.getCurrentHour();
}
int minute = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
minute = timePicker.getMinute();
}else{
minute = timePicker.getCurrentMinute();
}
TimeDialogListener activity = (TimeDialogListener) getActivity();
activity.onFinishDialog(updateTime(hour,minute));
dismiss();
}
})
.create();
}
private String updateTime(int hours, int mins) {
String timeSet = "";
if (hours > 12) {
hours -= 12;
timeSet = "PM";
} else if (hours == 0) {
hours += 12;
timeSet = "AM";
} else if (hours == 12)
timeSet = "PM";
else
timeSet = "AM";
String minutes = "";
if (mins < 10)
minutes = "0" + mins;
else
minutes = String.valueOf(mins);
String myTime = new StringBuilder().append(hours).append(':')
.append(minutes).append(" ").append(timeSet).toString();
return myTime;
}
}
首先,我们膨胀 dialog_time.xml。然后引用 timePicker
。然后我们创建并返回一个 AlertDialog
,它会显示给用户。我们使用了与 datePicker 方法中相同的 setView()
方法来设置膨胀的视图。当用户点击 TimePicker 对话框的确定按钮时,我们首先选择小时和分钟。为了选择小时,对于支持 Android API 23(Android Marshmallow)的手机,我们使用 timePicker.getHour()
,对于早期版本,我们使用 timePicker.getCurrentHour()
。然后我们根据小时和分钟的值创建一个字符串对象 myTime
。我们还将事件传递给宿主活动,在我们的例子中是 MainActivity
。
为此,我们定义了一个接口 TimeDialogListener
,其中包含每种点击事件类型的方法。我们需要在将从对话框接收操作事件的宿主活动中实现此接口。
显示对话框
要显示对话框,我们创建一个 DialogFragment
实例并调用 show()
,传入 FragmentManager 和对话框片段的标签名。
系统使用标签在必要时保存和恢复片段状态。它还允许我们通过使用 findFragmentByTag()
获取片段的句柄。
首先打开 MainActivity
的布局文件,即 activity_main.xml,并添加以下代码。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<Button
android:id="@+id/alert_dialog_one_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Alert Dialog with one button"
android:padding="20dp"/>
<Button
android:id="@+id/alert_dialog_two_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Alert Dialog with two button"
android:padding="20dp"/>
<Button
android:id="@+id/alert_dialog_three_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Alert Dialog with three button"
android:padding="20dp"/>
<Button
android:id="@+id/alert_dialog_single_choice_list_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Single Choice Dialog"
android:padding="20dp"/>
<Button
android:id="@+id/alert_dialog_single_choice_radio_button_list_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Single Choice Radio Button Dialog"
android:padding="20dp"/>
<Button
android:id="@+id/alert_dialog_multiple_choice_check_box_list_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Multiple Choice Check Box Dialog"
android:padding="20dp"/>
<Button
android:id="@+id/alert_dialog_date_picker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Date Picker Dialog"
android:padding="20dp"/>
<Button
android:id="@+id/alert_dialog_time_picker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Time Picker Dialog"
android:padding="20dp"/>
</LinearLayout>
我们创建了按钮来演示我们上面讨论的不同类型的 AlertDialogs
。
打开文件 MainActivity.java 并添加以下代码。
MainActivity.java。
package com.androidtutorialpoint.alertdialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends AppCompatActivity implements DatePickerFragment.DateDialogListener,TimePickerFragment.TimeDialogListener {
private static final String DIALOG_DATE = "MainActivity.DateDialog";
private static final String DIALOG_TIME = "MainActivity.TimeDialog";
private static final String DIALOG_SINGLE_BUTTON = "MainActivity.SingleButtonDialog";
private static final String DIALOG_TWO_BUTTON = "MainActivity.TwoButtonDialog";
private static final String DIALOG_THREE_BUTTON = "MainActivity.ThreeButtonDialog";
private static final String DIALOG_SINGLE_CHOICE_LIST = "MainActivity.SingleChoiceListDialog";
private static final String DIALOG_SINGLE_CHOICE_RADIO_BUTTON_LIST = "MainActivity.SingleChoiceRadioButtonListDialog";
private static final String DIALOG_MULTIPLE_CHOICE_CHECK_BOX_LIST = "MainActivity.MultipleChoiceCheckBoxListDialog";
private Button singleButtonAlertDialog;
private Button twoButtonAlertDialog;
private Button threeButtonAlertDialog;
private Button datePickerAlertDialog;
private Button timePickerAlertDialog;
private Button singleChoiceListAlertDialog;
private Button singleChoiceRadioButtonAlertDialog;
private Button multipleChoiceCheckBoxAlertDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
singleButtonAlertDialog = (Button)findViewById(R.id.alert_dialog_one_button);
twoButtonAlertDialog = (Button)findViewById(R.id.alert_dialog_two_button);
threeButtonAlertDialog = (Button)findViewById(R.id.alert_dialog_three_button);
datePickerAlertDialog = (Button)findViewById(R.id.alert_dialog_date_picker);
timePickerAlertDialog = (Button)findViewById(R.id.alert_dialog_time_picker);
singleChoiceListAlertDialog = (Button)findViewById(R.id.alert_dialog_single_choice_list_button);
singleChoiceRadioButtonAlertDialog = (Button)findViewById(R.id.alert_dialog_single_choice_radio_button_list_button);
multipleChoiceCheckBoxAlertDialog = (Button)findViewById(R.id.alert_dialog_multiple_choice_check_box_list_button);
singleButtonAlertDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SingleButtonFragment dialog = new SingleButtonFragment();
dialog.show(getSupportFragmentManager(), DIALOG_SINGLE_BUTTON);
}
});
twoButtonAlertDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TwoButtonFragment dialog = new TwoButtonFragment();
dialog.show(getSupportFragmentManager(), DIALOG_TWO_BUTTON);
}
});
threeButtonAlertDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ThreeButtonFragment dialog = new ThreeButtonFragment();
dialog.show(getSupportFragmentManager(), DIALOG_THREE_BUTTON);
}
});
datePickerAlertDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerFragment dialog = new DatePickerFragment();
dialog.show(getSupportFragmentManager(), DIALOG_DATE);
}
});
timePickerAlertDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TimePickerFragment dialog = new TimePickerFragment();
dialog.show(getSupportFragmentManager(), DIALOG_TIME);
}
});
singleChoiceListAlertDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SingleChoiceListFragment dialog = new SingleChoiceListFragment();
dialog.show(getSupportFragmentManager(), DIALOG_SINGLE_CHOICE_LIST);
}
});
singleChoiceRadioButtonAlertDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SingleChoiceRadioButtonListFragment dialog = new SingleChoiceRadioButtonListFragment();
dialog.show(getSupportFragmentManager(), DIALOG_SINGLE_CHOICE_RADIO_BUTTON_LIST);
}
});
multipleChoiceCheckBoxAlertDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MultipleChoiceCheckBoxListFragment dialog = new MultipleChoiceCheckBoxListFragment();
dialog.show(getSupportFragmentManager(), DIALOG_MULTIPLE_CHOICE_CHECK_BOX_LIST);
}
});
}
@Override
public void onFinishDialog(Date date) {
Toast.makeText(this, "Selected Date :"+ formatDate(date), Toast.LENGTH_SHORT).show();
}
public String formatDate(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
String hireDate = sdf.format(date);
return hireDate;
}
@Override
public void onFinishDialog(String time) {
Toast.makeText(this, "Selected Time : "+ time, Toast.LENGTH_SHORT).show();
}
}
请注意,MainActivity
实现了我们在 datePickerFragment
和 timePickerFragment
中定义的接口 DatePickerFragment.DateDialogListener
和 TimePickerFragment.TimeDialogListener
。
MainActivity
代码非常简单,我们首先为每种类型的 AlertDialog
定义了唯一的标签。接下来,我们引用布局中的按钮。在 OnClickListener()
中,我们正在显示 AlertDialog
。
最后,我们有两个方法:onFinishDialog(Date date)
用于处理 datePicker
事件,onFinishDialog(String time)
用于处理 timePicker
事件。
在这些方法中,我们只是通过 toast 消息分别向用户显示日期和时间。
我们使用了以下字符串资源,打开您的 strings.xml 并放入以下字符串。
strings.xml
<resources>
<string name="app_name">AlertDialog</string>
<string name="date_picker_title">Select Date</string>
<string name="cancel">Cancel</string>
<string name="dialog_single_button">Isn\'t This Tutorial Great !!</string>
<string name="no">No</string>
<string name="yes">Yes</string>
<string name="dialog_two_button">Are you a professional Android Developer ?</string>
<string name="dialog_three_button">Did you subscribe to Android Tutorial Point ?</string>
<string name="remind">Remind Me Later</string>
<string name="pick_dish">What is your favourite Dish ?</string>
<string name="ok">OK</string>
<string name="time_picker_title">Select Time</string>
</resources>
现在运行应用程序并尝试不同类型的 AlertDialogs
。您还可以使用自定义布局来更精细地控制向用户显示的对话框,例如,您可以使用带有 EditText
的 Android 对话框来获取用户输入。