zoukankan      html  css  js  c++  java
  • 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>
    textdialog

    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 }
    TexDialogFragment

    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     }
    showdialog

     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();
    AlertDialog

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

  • 相关阅读:
    H5实现的时钟
    Hystrix 熔断机制原理
    Redis模块化基本介绍
    Redis Pipeline原理分析
    Redis事务原理分析
    Java NIO原理分析
    Java Reference 源码分析
    JDK AtomicInteger 源码分析
    Java 包装类笔记
    Spring Cache 笔记
  • 原文地址:https://www.cnblogs.com/ggz19/p/3830102.html
Copyright © 2011-2022 走看看