Android學習之DialogFragment
阿新 • • 發佈:2022-04-29
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兩個監聽事件,分別對應確定和取消按鈕。