Android学习之DialogFragment

DialogFrament是Android sdk中的对话框基类,开发人员可以针对此类进行扩展。他可以扩展出Android中的多种对话框,比如alertdialog,listdialog,radiodialog等。android已经为开发人员提供了简单的对话框,本篇要讲的是对话框的扩展部分。本例是根据sdk开发文档而来。

1.建立textdialog

在layout文件夹下面,建立textdialog的xml文档。在xml文档中,我们只定义了一个textview。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6     
 7 <TextView
 8     android:id="@+id/text"
 9     android:layout_width="fill_parent"
10     android:layout_height="wrap_content" />
11 
12 </LinearLayout>

2.建立textdialog类

在src中添加新类TextDialogFragment,该类需要继承DialogFragment,并需要实现它的一些方法,比如onCreate(),onCreateView()等。在类中主要是为textview设置需要显示的字段,以及设置dialog显示的样式和主题等。这里是对DialogFragment扩展的主要部分,我们可以再这里定义自己的方法,定义事件等。不如诗listdialog,需要定义适配器,需要定义itemclick。

 1 public class TextDialogFramnet extends DialogFragment {
 2     
 3     int mNum;
 4 
 5     static TextDialogFramnet newInstance(int num)
 6     {
 7         TextDialogFramnet textdia=new TextDialogFramnet();
 8         Bundle bundel=new Bundle();
 9         bundel.putInt("name", num);
10         textdia.setArguments(bundel);
11         return textdia;
12     }
13     public void onCreate(Bundle saveInstanced)
14     {
15         super.onCreate(saveInstanced);
16         mNum=getArguments().getInt("name");
17         int style=DialogFragment.STYLE_NO_TITLE,theme=0;
18         switch((mNum-1)%6)
19         {
20         case 1:
21             style=DialogFragment.STYLE_NO_TITLE;
22             break;
23         case 2:
24             style=DialogFragment.STYLE_NO_FRAME;
25          case 3:
26              style = DialogFragment.STYLE_NO_INPUT; 
27              break;
28          case 4: 
29              style = DialogFragment.STYLE_NORMAL;
30              break;
31          case 5: 
32              style = DialogFragment.STYLE_NORMAL; 
33              break;
34          case 6: 
35              style = DialogFragment.STYLE_NO_TITLE;
36              break;
37          case 7:
38              style = DialogFragment.STYLE_NO_FRAME;
39              break;
40          case 8: 
41              style = DialogFragment.STYLE_NORMAL; 
42              break;
43         }
44         switch((mNum-1)%6)
45         {
46         case 4:
47             theme=android.R.style.Theme_Holo; break;
48         case 5:
49             theme=android.R.style.Theme_Holo_Light_Dialog;
50             break;
51          case 6: theme = android.R.style.Theme_Holo_Light; break;
52          case 7: theme = android.R.style.Theme_Holo_Light_Panel; break;
53          case 8: theme = android.R.style.Theme_Holo_Light; break;
54         }
55         setStyle(style,theme);
56     }
57     public View onCreateView(LayoutInflater inflater,ViewGroup contaniner,Bundle savedInstance)
58     {
59         View v=inflater.inflate(R.layout.textdialog, contaniner,false);
60         TextView tv=(TextView)v.findViewById(R.id.text);
61         tv.setText("Dialog#"+mNum+":using style");
62         return v;
63     
64     }
65 }

3.调用textdialog

在我们的activity中调用刚刚定义的对话框,首先需要对话框的实例化,然后根据对话框的需要,调用对话框的方法。最后是调用show()方法,显示该对话框。

 1  void showDialog() {
 2         mStackLevel++;
 3 
 4         android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
 5         android.app.Fragment prev = getFragmentManager().findFragmentByTag("dialog");
 6         if (prev != null) {
 7             ft.remove(prev);
 8         }
 9         ft.addToBackStack(null);
10 
11         // Create and show the dialog.
12         DialogFragment newFragment = TextDialogFramnet.newInstance(mStackLevel);
13         newFragment.show(ft, "dialog");
14     }

 4.alertDialog

alertdialog 是sdk封装好的一个对话框,我们可以直接调用的。需要注意的是,该类是静态的,无需实例化,可以直接调用。

 1     new AlertDialog.Builder(MainActivity.this).setIcon(R.drawable.ic_launcher)
 2                 .setTitle("是否删除文件").setPositiveButton("确定", new DialogInterface.OnClickListener() {
 3                     
 4                     @Override
 5                     public void onClick(DialogInterface dialog, int which) {
 6                         // TODO 自动生成的方法存根
 7                         new AlertDialog.Builder(MainActivity.this).setMessage("文件已经被删除").create().show();
 8                     }
 9                 })
10                 .setNegativeButton("取消", new DialogInterface.OnClickListener() {
11                     
12                     @Override
13                     public void onClick(DialogInterface dialog, int which) {
14                         // TODO 自动生成的方法存根
15                         new AlertDialog.Builder(MainActivity.this).setMessage("您已经选择取消按钮,文件未删除").create().show();
16                     }
17                 })
18                 .show();

该段代码实现了提示对话框,当我们删除的时候,可以弹出该对话框,并设置了setpositivebutton和setnegativebutton两个监听事件,分别对应确定和取消按钮。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯Bugly的专栏

《Android基础:Fragment,看这篇就够了》

| 导语 Fragment作为Android最基本,最重要的基础概念之一,在开发中经常会和他打交道。本文从为什么出现Fragment开始,介绍了Fragment...

1.6K60
来自专栏Android-薛之涛

Android - 懒加载

如果我们的项目中使用了ViewPager+Framgment实现底部Tab可点可滑,那么我们都知道ViewPager有预加载功能,通过viewpager.set...

25320
来自专栏Android源码框架分析

ViewPager刷新问题原理分析及解决方案(FragmentPagerAdapter+FragementStatePagerAdapter)ViewPager+FragmentPagerAdapte

61520
来自专栏Android Note

Android-实用的MVP

16730
来自专栏云加头条

Android 基础:Fragment,看这篇就够了 (上)

本文从为什么出现Fragment开始,介绍了Fragment相关的方方面面,包括Fragment的基本定义及使用、回退栈的内部实现、Fragment通信、Dia...

2.5K40
来自专栏緣來來來

安卓基础干货(五):安卓线程与数据上传下载的学习

7810
来自专栏小鄧子的技术博客专栏

【译】Android泄漏模式:View中的订阅

我们通过一些自定义的view来构建Square register模块。有时候这些view需要监听一个比他们自身声明周期还要长的对象。

8710
来自专栏7号代码

Android应用界面开发——Fragment(实现图书详情界面)

Fragment代表了Activity的子模块,因此可以把Fragment理解成Activity片段。

40320
来自专栏Android常用基础

Dagger2-从入门到精通(下)

继上篇文章,这篇我们来学习Dagger2的高级用法。如果没看上篇文章的话最好先看下上篇文章再来学习本章,因为本章是接续上篇文章来写的,直接来看的话可能效果不是很...

81820
来自专栏潇涧技术专栏

Android Training Summary (1) Getting Started

Android Training 中Getting Started部分的阅读笔记

7200

扫码关注云+社区

领取腾讯云代金券