DialogFragment笔记

来源:互联网 发布:oecd数据库下载 编辑:程序博客网 时间:2024/04/27 23:48

DialogFragment笔记

开发中一般情况下都会要用到提示信息这个小功能.实现方法也有很多.今天介绍其中的一种,就是用DialogFragment来实现.![先看效果图](http://img.blog.csdn.net/20160630135914633)实现很简单.先看MainActivity.
package cn.study.dialogfragment.activity;import android.app.Activity;import android.app.Fragment;import android.app.FragmentTransaction;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.TextView;import cn.study.dialogfragment.R;import cn.study.dialogfragment.dialog.DemoDialogFragment;public class MainActivity extends Activity implements OnClickListener {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        getActionBar().hide();        TextView tv = (TextView) findViewById(R.id.show);        tv.setOnClickListener(this);    }    @Override    public void onClick(View v) {        FragmentTransaction transaction = getFragmentManager().beginTransaction();        Fragment fragment = getFragmentManager().findFragmentByTag("dialogFragment");        if(fragment != null){             //为了不重复显示dialog,在显示对话框之前移除正在显示的对话框              transaction.remove(fragment);        }        DemoDialogFragment demoDialogFragment = new DemoDialogFragment();        //显示一个Fragment并且给该Fragment添加一个Tag,可通过findFragmentByTag找到该Fragment          demoDialogFragment.show(getFragmentManager(), "dialogFragment");    }}

就是一个TextView添加一个点击事件,然后弹出一个dialog.
下面是自定义一个DialogFragment继承DialogFragment.

package cn.study.dialogfragment.dialog;import android.app.AlertDialog;import android.app.Dialog;import android.app.DialogFragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import cn.study.dialogfragment.R;/** * 那么怎么使用DialogFragment呢?有两种方法:一、通过继承DialogFragment并且实现它的onCreateDialog(Bundle savedInstanceState)方法来创建一个DialogFragment,这个方法返回的是一个Dialog,意味着我们需要创建一个AlertDialog,并返回。二、 通过继承DialogFragment并且实现它的onCreateView(LayoutInflater, ViewGroup, Bundle) 这个方法来加载一个我们指定的xml布局从而提供对话框内容。【注】以上两种方法创建对话框时候只能使用其中一种,不能两个同时使用。 * @author a * */public class DemoDialogFragment extends DialogFragment {    /*     * 创建一个新的dialogFragment:显示的是系统默认的dialog     */    /*@Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        return new AlertDialog.Builder(getActivity()).setTitle("提示:").setMessage("确认退出不?").setPositiveButton("确认", new OnClickListener() {            @Override            public void onClick(DialogInterface dialog, int which) {                dismiss();            }        }).setNegativeButton("取消", null)                .create();    }*/    /**O     * 自定义消息提示框     */    @Override    public Dialog onCreateDialog(Bundle savedInstanceState) {        View view = LayoutInflater.from(getActivity()).inflate(R.layout.mydialog, null);        Button cancel = (Button) view.findViewById(R.id.cancel);        cancel.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                dismiss();            }        });        final TextView title = (TextView) view.findViewById(R.id.title);        Button ok = (Button) view.findViewById(R.id.ok);        ok.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                title.setText("真的退出吗?");                new Thread(new Runnable() {                    public void run() {                        try {                            Thread.sleep(2000);                            getActivity().runOnUiThread(new Runnable() {                                @Override                                public void run() {                                    dismiss();                                }                            });                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                }).start();            }        });        return new AlertDialog.Builder(getActivity()).setView(view).show();    }    /*@Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.mydialog, null);        Button cancel = (Button) view.findViewById(R.id.cancel);        cancel.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                dismiss();            }        });        final TextView title = (TextView) view.findViewById(R.id.title);        Button ok = (Button) view.findViewById(R.id.ok);        ok.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                title.setText("真的退出吗?");                new Thread(new Runnable() {                    public void run() {                        try {                            Thread.sleep(2000);                            getActivity().runOnUiThread(new Runnable() {                                @Override                                public void run() {                                    dismiss();                                }                            });                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                }).start();            }        });        *//**         * 运行发现,弹出的dialog会默认多出一个title行.这是因为源码是把该View加载到Dialog的message部分.所以多出一个title行         * 去掉方式:如下         *//*        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);        *//**         * 运行后发现,该方法得到的dialog大小会随着内容的大小改变.所以建议用onCreateDialog()方法,来做.         *//*        return view;    }*/}

Ok,效果就实现啦, 要注意的地方在代码中也已经注释.

0 0
原创粉丝点击