Android DialogFragment使用

简介: 1. 简单使用继承DialogFragment/** * 显示系统的对话框Fragment * @author mazaiting * @date 2018/3/1 */public class CustomDialogFragm...

1. 简单使用

  • 继承DialogFragment
/**
 * 显示系统的对话框Fragment
 * @author mazaiting
 * @date 2018/3/1
 */

public class CustomDialogFragment extends DialogFragment implements DialogInterface.OnClickListener{
    private static final String TAG = "CustomDialogFragment";
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder =
                new AlertDialog.Builder(getActivity())
                .setTitle("标题")
                .setMessage("消息")
                .setPositiveButton("确定", this)
                .setNegativeButton("取消", this)
                .setCancelable(false);
        // 这里不能调用show方法
        return builder.create();
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
            case DialogInterface.BUTTON_NEGATIVE:
                Toast.makeText(getActivity(), "取消", Toast.LENGTH_SHORT).show();
                break;
            case DialogInterface.BUTTON_POSITIVE:
                Toast.makeText(getActivity(), "确定", Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }
}
  • 使用
new CustomDialogFragment().show(getSupportFragmentManager(), "custom");

2. 自定义View的DialogFragment

  • 继承Fragment
public class ViewDialogFragment extends DialogFragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        return inflater.inflate(R.layout.dialog, container, false);
    }
}
  • 布局dialog.xml
<?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"
    android:padding="16dp">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge"/>

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:ems="10">

        <requestFocus/>
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:text="Button"/>

</LinearLayout>
  • 使用
new ViewDialogFragment().show(getSupportFragmentManager(), "view");

3. 接口通信

  • 接口
/**
 * 接口通信
 * @author mazaiting
 * @date 2018/3/1
 */

public interface DataCallback {
    /**
     * 获取数据
     * @param data 数据
     */
    void getData(String data);
}
  • 继承DialogFragment
/**
 * 接口通信
 *
 * @author mazaiting
 * @date 2018/3/1
 */

public class DataDialogFragment extends DialogFragment implements DialogInterface.OnClickListener {
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder =
                new AlertDialog.Builder(getActivity())
                        .setTitle("标题")
                        .setMessage("消息")
                        .setPositiveButton("确定", this)
                        .setNegativeButton("取消", this)
                        .setCancelable(false);
        return builder.create();
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        DataCallback callback = (DataCallback) getActivity();
        switch (which) {
            case DialogInterface.BUTTON_NEGATIVE:
                callback.getData("取消");
                break;
            case DialogInterface.BUTTON_POSITIVE:
                callback.getData("确定");
                break;
            default:
                break;
        }
    }
}
  • 使用
public class MainActivity extends AppCompatActivity implements DataCallback{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.inject(this);
    }

    @OnClick({R.id.btn_custom, R.id.btn_view, R.id.btn_get_data})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.btn_custom:
                new CustomDialogFragment().show(getSupportFragmentManager(), "custom");
                break;
            case R.id.btn_view:
                new ViewDialogFragment().show(getSupportFragmentManager(), "view");
                break;
            case R.id.btn_get_data:
                new DataDialogFragment().show(getSupportFragmentManager(), "data");
                break;
            default:
                break;
        }
    }

    @Override
    public void getData(String data) {
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
    }
}

目录
相关文章
|
XML Android开发 数据格式
Android面试题之DialogFragment中隐藏导航栏
在Android中展示全屏`DialogFragment`并隐藏状态栏和导航栏,可通过设置系统UI标志实现。 记得在布局文件中添加内容,并使用`show()`方法显示`DialogFragment`。
193 2
|
Android开发
关于安卓DialogFragment使用(三)
关于安卓DialogFragment使用(三)
450 0
|
Android开发
Android DialogFragment 的封装
Android DialogFragment 的封装
Android DialogFragment 的封装
|
Android开发
关于安卓底部dialogfragment封装
关于安卓底部dialogfragment封装
497 0
|
Android开发
关于安卓DialogFragment基类封装
安卓DialogFragment基类封装
242 0
|
Android开发 容器
Android开发 - 解决DialogFragment在全屏时View被状态栏遮住的问题
我的上一篇文章:设置DialogFragment全屏显示 可以设置对话框的内容全屏显示,但是存在在某些机型上顶部的View被状态栏遮住的问题。经过测试,发现了一种解决办法,在DialogFragment的onCreateView()中添加一个布局监听器: @Override public View.
2604 0
|
Android开发 uml 容器
Android基于DialogFragment封装一个通用的Dialog
1、内置Dialog常用默认的样式,内置样式可自行修改 2、支持自定义复杂的布局、动画、对话框大小、背景色等设 3、统一管理多个dialog并顺序弹出
6234 0
|
Android开发 容器
Android中DialogFragment优于Dialog
首先DialogFragment是跟随Fragment一起被Google推出的,DialogFragment是基于Fragment的,生命周期和Fragment是一样的。
1363 0