Android特殊碎片 —— DialogFragment-阿里云开发者社区

开发者社区> 开发与运维> 正文

Android特殊碎片 —— DialogFragment

简介:

我们也可以创建另外一种碎片——DialogFragment。顾名思义,DialogFragment就是一个浮动在Activity上面的Fragment。当需要用户的反馈时,DialogFragment就会派上用场。与使用ListFragment类似,需要继承DialogFragment基类。

下面将会展示如何使用DialogFragment。

1、创建一个工程:DialogFragmentExample。

2、在包路径下面新建一个类,Fragment1。

[java] view plaincopy
  1. public class Fragment1 extends DialogFragment {  
  2.   
  3.     static Fragment1 newInstance(String title) {  
  4.         Fragment1 fragment = new Fragment1();  
  5.         Bundle args = new Bundle();  
  6.         args.putString("title", title);  
  7.         fragment.setArguments(args);  
  8.         return fragment;  
  9.     }  
  10.   
  11.     @Override  
  12.     public Dialog onCreateDialog(Bundle savedInstanceState) {  
  13.         String title = getArguments().getString("title");  
  14.         return new AlertDialog.Builder(getActivity())  
  15.         .setIcon(R.drawable.ic_launcher)  
  16.         .setTitle(title)  
  17.         .setPositiveButton("OK",  
  18.                 new DialogInterface.OnClickListener() {  
  19.             public void onClick(DialogInterface dialog,   
  20.                     int whichButton) {  
  21.                 ((DialogFragmentExampleActivity)  
  22.                         getActivity()).doPositiveClick();  
  23.             }  
  24.         })  
  25.         .setNegativeButton("Cancel",  
  26.                 new DialogInterface.OnClickListener() {  
  27.             public void onClick(DialogInterface dialog,   
  28.                     int whichButton) {  
  29.                 ((DialogFragmentExampleActivity)  
  30.                         getActivity()).doNegativeClick();  
  31.             }  
  32.         }).create();  
  33.     }          
  34.   
  35. }  
3、DialogFragmentExampleActivity.java中的代码。

[java] view plaincopy
  1. public class DialogFragmentExampleActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.           
  8.         Fragment1 dialogFragment = Fragment1.newInstance(  
  9.                 "Are you sure you want to do this?");  
  10.             dialogFragment.show(getFragmentManager(), "dialog");     
  11.     }  
  12.       
  13.     public void doPositiveClick() {  
  14.         //---perform steps when user clicks on OK---  
  15.         Log.d("DialogFragmentExample""User clicks on OK");  
  16.     }  
  17.   
  18.     public void doNegativeClick() {  
  19.         //---perform steps when user clicks on Cancel---  
  20.         Log.d("DialogFragmentExample""User clicks on Cancel");  
  21.     }  
  22.   
  23. }  
4、按F11在模拟器上调试。会看到一个对话框,点击OK或Cancel按钮会弹出消息。


要创建一个DialogFragment,首先要继承DialogFragment基类:

[java] view plaincopy
  1. public class Fragment1 extends DialogFragment{  
  2. }  
在这个例子中,我没创建一个警告对话框,它包含一条警告消息和两个可供点击的按钮。在Fragment1类中,我们定义了一个newInstance()方法:

[java] view plaincopy
  1. static Fragment1 newInstance(String title) {  
  2.         Fragment1 fragment = new Fragment1();  
  3.         Bundle args = new Bundle();  
  4.         args.putString("title", title);  
  5.         fragment.setArguments(args);  
  6.         return fragment;  
  7.     }  
这个newInstance()方法允许创建一个碎片的实例对象,同时,它也可以接受一个指定的字符串参数,这个参数就是对话框中的消息。title对象被存储在一个Bundle对象中,之后会用到它。

接下来,我们定义了onCreateDialog()方法,这个方法在onCreate()之后,onCreateView()之前被调用:

[java] view plaincopy
  1. @Override  
  2.     public Dialog onCreateDialog(Bundle savedInstanceState) {  
  3.         String title = getArguments().getString("title");  
  4.         return new AlertDialog.Builder(getActivity())  
  5.         .setIcon(R.drawable.ic_launcher)  
  6.         .setTitle(title)  
  7.         .setPositiveButton("OK",  
  8.                 new DialogInterface.OnClickListener() {  
  9.             public void onClick(DialogInterface dialog,   
  10.                     int whichButton) {  
  11.                 ((DialogFragmentExampleActivity)  
  12.                         getActivity()).doPositiveClick();  
  13.             }  
  14.         })  
  15.         .setNegativeButton("Cancel",  
  16.                 new DialogInterface.OnClickListener() {  
  17.             public void onClick(DialogInterface dialog,   
  18.                     int whichButton) {  
  19.                 ((DialogFragmentExampleActivity)  
  20.                         getActivity()).doNegativeClick();  
  21.             }  
  22.         }).create();  
  23.     }          
然后,我们可以创建两个按钮OK和Cancel。对话框的标题是从Bunddle对象中取出来的。

想要把对话框碎片显示出来,我们创建一个它的实例,然后调用show()方法即可:

[java] view plaincopy
  1. Fragment1 dialogFragment = Fragment1.newInstance(  
  2.                 "Are you sure you want to do this?");  
  3.             dialogFragment.show(getFragmentManager(), "dialog");    
同时,我们需要实现两个回调方法,doPositiveClick()和doNegativeClick(),通过这两个方法去处理用户的输入事件:

[java] view plaincopy
  1. public void doPositiveClick() {  
  2.         //---perform steps when user clicks on OK---  
  3.         Log.d("DialogFragmentExample""User clicks on OK");  
  4.     }  
  5.   
  6.     public void doNegativeClick() {  
  7.         //---perform steps when user clicks on Cancel---  
  8.         Log.d("DialogFragmentExample""User clicks on Cancel");  
  9.     }  

注:在Android 4.0版本以后,官方推荐使用DialogFragment去替换Dialog。大家可以看看Android 4.0的Launcher等源码,这些源码中大量使用了Fragment类。

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章