• <Android 基础(二十九)> Fragment (2) ~ DialogFragment


    简介

    上一篇简单的介绍了下Fragment的使用方法,这一篇主要看下DialogFragment。
    在android 3.0时被引入。是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。之前的博客中有针对AlertDialog作出过详细的介绍,这个的功能和它比较类似,但是官方推荐的必然会有其牛逼之处~

    使用方法 ~ 参考Fragment

    使用方法和Fragment基本相同,但是DialogFragment多出来一个onCreateDialog方法

    1.创建Fragment对应的布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="250dp"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:gravity="center_horizontal"
            android:text="MOBLIE APP"
            android:textColor="@color/colorAccent"
            android:textStyle="bold|italic" />
    
        <android.support.design.widget.TextInputLayout
            android:layout_width="250dp"
            android:layout_height="wrap_content">
    
            <EditText
                android:id="@+id/et_username"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:hint="Username" />
        </android.support.design.widget.TextInputLayout>
    
        <android.support.design.widget.TextInputLayout
            android:layout_width="250dp"
            android:layout_height="wrap_content">
    
            <EditText
                android:id="@+id/et_passwrod"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:hint="Password" />
    
    
        </android.support.design.widget.TextInputLayout>
    
        <Button
            android:id="@+id/bt_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="登录" />
    </LinearLayout>


    2.创建继承DialogFragment的Fragment并重写onCreateView方法

    public class ContentFragment extends DialogFragment {
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.content_fragment, container);
            return view;
        }
    }


    3.Activity中使用

        private void showRunDialog() {
            ContentFragment dialog = new ContentFragment();
            dialog.show(getFragmentManager(), "login");//后面的字串是Tag
        }


    4.效果

    这里写图片描述

    使用方法 ~ DialogFragment独有


    1.创建Fragment对应的布局文件

    这个布局可以和上面相同,但是为了区分效果,单独编写一个

    <?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="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:gravity="center"
            android:text="Mobile APP"
            android:textColor="@color/colorAccent"
            android:textSize="20sp"
            android:textStyle="bold|italic" />
    
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <EditText
                android:id="@+id/et_username"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:hint="Username" />
    
    
        </android.support.design.widget.TextInputLayout>
    
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <EditText
                android:id="@+id/et_passwrod"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:hint="Password" />
    
    
        </android.support.design.widget.TextInputLayout>
    </LinearLayout>


    2.创建继承DialogFragment的Fragment并重写onCreateDialog方法

    public class DialogContent extends DialogFragment {
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
    
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    
            final View view = getActivity().getLayoutInflater().inflate(R.layout.content_dialog, null, false);
    
    
            builder.setView(view)
                    .setPositiveButton("登录", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            final String username = ((EditText) (view.findViewById(R.id.et_username))).getText().toString();
                            final String password = ((EditText) (view.findViewById(R.id.et_passwrod))).getText().toString();
                            ((MainActivity) getActivity()).setUsernameAndPassword(username, password);//与Activity交互,也可以通过实现接口的方式实现
                        }
                    })
                    .setNegativeButton("注册", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            final String username = ((EditText) (view.findViewById(R.id.et_username))).getText().toString();
                            final String password = ((EditText) (view.findViewById(R.id.et_passwrod))).getText().toString();
                            ((MainActivity) getActivity()).setUsernameAndPassword("注册", "注册");//与Activity交互,也可以通过实现接口的方式实现
                        }
                    });
    
            return builder.create();
        }
    }

    在onCreateDialog方法中,通过创建AlertDialog的方式来生成Dialog

    3.Activity中使用方式和上面相同


    4.效果

    这里写图片描述

    优势

    屏幕旋转过程中对话框不消失
    这里写图片描述
    这里写图片描述

  • 相关阅读:
    Zookeeper 记录
    Eureka 分析记录
    Hbase 学习记录
    小技巧 Mongodb 动态查询 除去 _class 条件
    科技的继续发展会带给我们什么?
    无限拓展热区域缓存服务方案
    Git 的 4 个阶段的撤销更改
    自动化运维利器 Fabric
    Linux Shell 文本处理工具
    如何在 Linux 中找出 CPU 占用高的进程
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6467159.html
Copyright © 2020-2023  润新知