首页 > 代码库 > Android学习之DialogFragment
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 @Override13 public void onClick(DialogInterface dialog, int which) {14 // TODO 自动生成的方法存根15 new AlertDialog.Builder(MainActivity.this).setMessage("您已经选择取消按钮,文件未删除").create().show();16 }17 })18 .show();
该段代码实现了提示对话框,当我们删除的时候,可以弹出该对话框,并设置了setpositivebutton和setnegativebutton两个监听事件,分别对应确定和取消按钮。