最简单的是/否对话框片段

Muz*_*Muz 39 android dialog android-fragments android-alertdialog

我想问一下dialog fragment"你确定吗?" 带有"是/否"回复.

我查看了文档并且它非常详细,遍布整个地方,解释了如何制作高级对话框,但没有完整的代码来制作一个简单的"hello world"类型的对话框.大多数教程都使用不推荐使用的对话框系统.在官方博客似乎是不必要的复杂和难以理解.

那么,创建和显示真正基本的警报对话框的最简单方法是什么?如果它使用支持库,则奖励积分.

ath*_*hor 78

DialogFragment实际上只是一个包装对话框的片段.您可以通过在DialogFragment的onCreateDialog()方法中创建和返回对话框来在其中放置任何类型的对话框.

下面是一个示例DialogFragment:

class MyDialogFragment extends DialogFragment{
    Context mContext;
    public MyDialogFragment() {
        mContext = getActivity();
    }
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mContext);
        alertDialogBuilder.setTitle("Really?");
        alertDialogBuilder.setMessage("Are you sure?");
        //null should be your on click listener
        alertDialogBuilder.setPositiveButton("OK", null);
        alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });


        return alertDialogBuilder.create();
    }
}
Run Code Online (Sandbox Code Playgroud)

要创建对话框调用:

new MyDialogFragment().show(getFragmentManager(), "MyDialog");
Run Code Online (Sandbox Code Playgroud)

并从某处解雇对话框:

((MyDialogFragment)getFragmentManager().findFragmentByTag("MyDialog")).getDialog().dismiss();
Run Code Online (Sandbox Code Playgroud)

所有这些代码都可以与支持库完美配合,只需更改导入即可使用支持库类.

  • @muz Android系统需要一个`Fragment`类来拥有一个**没有参数**的构造函数,以便在需要时实例化该片段.在`Fragment`中,您可以引用此片段与`getActivity()`方法一起使用的活动(使用它而不是`mContext`).此片段还必须在其自己的java文件中声明,或者在另一个类中声明为**内部静态**类.否则Android将无法找到您的片段来实例化它. (8认同)

Luk*_*rog 12

那么,创建和显示真正基本的警报对话框的最简单方法是什么?如果它使用支持库,则奖励积分.

只需创建一个DialogFragment(sdk或支持库)并覆盖其onCreateDialog方法,即返回一个AlertDialog所需的文本和按钮:

public static class SimpleDialog extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
                .setMessage("Are you sure?")
                .setPositiveButton("Ok", null)
                .setNegativeButton("No way", null)
                .create();
    }

}
Run Code Online (Sandbox Code Playgroud)

要在用户使用其中一个按钮时执行某些操作,您必须提供一个实例DialogInterface.OnClickListener而不是null我的代码中的引用.


Muz*_*Muz 5

对于使用Kotlin和Anko编码的人,您现在可以用4行代码进行对话:

alert("Order", "Do you want to order this item?") {
    positiveButton("Yes") { processAnOrder() }
    negativeButton("No") { }
}.show()
Run Code Online (Sandbox Code Playgroud)