我应该使用DialogFragment来显示对话框吗?

时间:2016-03-30 11:25:30

标签: android

如果我想显示对话框,我可以写下这些代码:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.show();

但是当我看到API时,它说我们应该创建一个继承DialogFragment的类。所以我的问题是我应该总是使用DialogFragment类吗?在这种情况下,我只能使用这个类?

4 个答案:

答案 0 :(得分:0)

不,您不应该每次都要求使用DialogFragment。你可以使用它。

public void showSimpleInfoAlertDialog(Context context, String title, String msg) {


        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        AlertDialog dialog;
        builder.setTitle(title);
        builder.setIcon(android.R.drawable.ic_dialog_info);
        builder.setMessage(msg);

        builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                dialog.dismiss();
            }
        });
        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

               //your stuff
                dialog.dismiss();


            }
        });


        dialog = builder.create();
        dialog.show();

    }

答案 1 :(得分:0)

我建议使用这个非常令人愉快的库(https://github.com/afollestad/material-dialogs)。它减少了代码库并确保了一致的外观。您还可以针对更复杂的情况自定义其内容/行为,例如自定义列表或侦听器

答案 2 :(得分:0)

我有类似的问题,,,我必须实现一个登录对话框,我做了以下操作,它就像一个魅力,,,试一试

这是我的登录对话框布局XML内容,你可以设计你的布局,它由你决定

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">

<ImageView
    android:layout_width="match_parent"
    android:layout_height="64dp"
    android:background="@android:color/holo_blue_light"
    android:contentDescription="@string/app_name"
    android:scaleType="center"
    android:src="@drawable/logo" />

<EditText
    android:id="@+id/username"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="4dp"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="4dp"
    android:layout_marginTop="16dp"
    android:hint="Username or Email"
    android:inputType="textEmailAddress" />

<EditText
    android:id="@+id/password"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="4dp"
    android:layout_marginTop="4dp"
    android:fontFamily="sans-serif"
    android:hint="Password"
    android:inputType="textPassword" />


<Button
    android:id="@+id/facebook_login"
    android:layout_width="fill_parent"
    android:layout_height="40sp"
    android:layout_below="@+id/linearLayout2"
    android:layout_gravity="center_horizontal"
    android:layout_margin="5dp"
    android:background="#3b5998"
    android:text="Login via Facebook"
    android:textColor="#ffffffff" />

<Button
    android:id="@+id/twitter_login"
    android:layout_width="fill_parent"
    android:layout_height="40sp"
    android:layout_below="@+id/facebook_normal"
    android:layout_gravity="center_horizontal"
    android:layout_margin="5dp"
    android:background="#55ACEE"
    android:text="Login via Twitter"
    android:visibility="gone"
    android:textColor="#ffffffff" />

<Button
    android:id="@+id/google_login"
    android:layout_width="fill_parent"
    android:layout_height="40sp"
    android:layout_below="@+id/twitter"
    android:layout_gravity="center_horizontal"
    android:layout_margin="5dp"
    android:background="#D64534"
    android:text="Login via Google"
    android:textColor="#ffffffff" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="30sp"
        android:layout_alignParentTop="true"
        android:layout_gravity="center_horizontal"
        android:layout_margin="5dp"
        android:layout_marginEnd="20dp"
        android:layout_marginRight="20dp"
        android:layout_toLeftOf="@+id/cancel_button"
        android:layout_toStartOf="@+id/cancel_button"
        android:background="#FFFFFF"
        android:text="Login"
        android:textColor="#009688" />

    <Button
        android:id="@+id/cancel_button"
        android:layout_width="0dp"
        android:layout_height="30sp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_gravity="center_horizontal"
        android:layout_margin="5dp"
        android:background="#FFFFFF"
        android:textColor="#009688"
        android:visibility="invisible" />
</RelativeLayout>

在此之后你需要做的就是在dialogBu​​ilder中膨胀这个布局,如下所示

{
  LayoutInflater linf = LayoutInflater.from(getContext());

            final View inflator = linf.inflate(R.layout.login_dialog, null);

            final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

            fLogin = (Button) inflator.findViewById(R.id.facebook_login);
            gLogin = (Button) inflator.findViewById(R.id.google_login);
            tLogin = (Button) inflator.findViewById(R.id.twitter_login);
            loginButton = (Button)   inflator.findViewById(R.id.login_button);
            cancelButton = (Button) inflator.findViewById(R.id.cancel_button);
            uName = (TextView) inflator.findViewById(R.id.username);
            pwd = (TextView) inflator.findViewById(R.id.password);

   /** You can handle click events here**//
    builder.setView(inflator).show();
   }

希望这会有所帮助...

答案 3 :(得分:0)

Dialogs guide中所述,建议您始终使用DialogFragment类。 DialogFragment将处理应用程序的生命周期事件并提供正确的行为。

检查文档中的这个摘录

  

但您应该使用DialogFragment作为对话框的容器。   DialogFragment类提供了创建所需的所有控件   您的对话框并管理其外观,而不是调用方法   对话框对象