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兩個監聽事件,分別對應確定和取消按鈕。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM