安卓基础(十七)

对话框

目标人群:没有基础的安卓初学者
知识点:DialogFragment的创建与调用
目标:在页面中显示一个含有两个按钮的对话框

简介

  • 对话框的介绍已导入准备

  • DialogFragment类的简单调用

正文

1.对话框是出现在用户眼前的一个小小的窗口,用于让用户即时的做出一些操作。在3.0之后的安卓版本中,统一建议使用DialogFragment来实现,对于低版本的安卓系统来说,首先我们需要在build.gradle中添加对support V4包的引用,代码如下:

dependencies {
    ...
    compile ‘com.android.support:support-v4:21.0.3‘
    ...
}
  • 也可以在项目中选择Open Module Settings-Dependencies-点击右侧加号-Library Dependency-选中appcompat-V4来进行添加

  • 如果为高于3.0之后的安卓版本,则不需要考虑此处

  • 以下示例为support-v4版本

2.创建一个FragmentActivity页面,命名为MainActivity,创建两个方法来对应对话框按钮的点击事件:

    public void doPositiveClick() {
        Log.i("FragmentAlertDialog", "Positive click!");
    }

    public void doNegativeClick() {
        Log.i("FragmentAlertDialog", "Negative click!");
    }

3.创建一个DialogFragment页面,命名为MyAlertDialogFragment,并实现它的onCreateDialog方法,代码如下:

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;

public class MyAlertDialogFragment extends DialogFragment {

    public static MyAlertDialogFragment newInstance(String title) {
        //创建一个新的对话框,并得到从调用页面传来的Title值
        MyAlertDialogFragment frag = new MyAlertDialogFragment();
        Bundle args = new Bundle();
        args.putString("title", title);
        frag.setArguments(args);
        return frag;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        /** 得到Title值,并创建一个对话框,该对话框包含两个按钮
           当两个按钮被点击时,分别调用了MainActivity页面的doPositiveClick和doNegativeClick方法 **/
        String title = getArguments().getString("title");
        return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.ic_launcher)
                .setTitle(title)
                .setPositiveButton("确定",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                ((MainActivity) getActivity()).doPositiveClick();
                            }
                        }
                )
                .setNegativeButton("取消",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                ((MainActivity) getActivity()).doNegativeClick();
                            }
                        }
                )
                .create();
    }
}

4.回到MainActivity中,使用代码来调用该DialogFragment,代码如下:

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

    public void showDialog() {
        DialogFragment newFragment = MyAlertDialogFragment.newInstance("两个按钮的对话框");
        newFragment.show(getSupportFragmentManager(), "alert");
    }
  • 当然也可以将该Fragment作为视图结构中的一员,以此来调用该DialogFragment
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = MyDialogFragment.newInstance();
ft.add(R.id.embedded, newFragment);
ft.commit();

扩展阅读

  1. DialogFragment的官方API
  2. Dialogs的官方API

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。