對話框
目標人羣:沒有基礎的安卓初學者
知識點:DialogFragment的創建與調用
目標:在頁面中顯示一個含有兩個按鈕的對話框
簡介
對話框的介紹已導入準備
DialogFragment類的簡單調用
正文
1.對話框是出現在用戶眼前的一個小小的窗口,用於讓用戶即時的做出一些操作。在3.0之後的安卓版本中,統一建議使用DialogFragment來實現,對於低版本的安卓系統來說,首先我們需要在build.gradle中添加對support V4包的引用,代碼如下:
dependencies {
...
compile 'com.android.support:support-v4:21.0.3'
...
}
也可以在項目中選擇Open Module Settings-Dependencies-點擊右側加號-Library Dependency-選中appcompat-V4來進行添加
如果爲高於3.0之後的安卓版本,則不需要考慮此處
以下示例爲support-v4版本
2.創建一個FragmentActivity頁面,命名爲MainActivity,創建兩個方法來對應對話框按鈕的點擊事件:
public void doPositiveClick() {
Log.i("FragmentAlertDialog", "Positive click!");
}
public void doNegativeClick() {
Log.i("FragmentAlertDialog", "Negative click!");
}
3.創建一個DialogFragment頁面,命名爲MyAlertDialogFragment,並實現它的onCreateDialog方法,代碼如下:
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
public class MyAlertDialogFragment extends DialogFragment {
public static MyAlertDialogFragment newInstance(String title) {
//創建一個新的對話框,並得到從調用頁面傳來的Title值
MyAlertDialogFragment frag = new MyAlertDialogFragment();
Bundle args = new Bundle();
args.putString("title", title);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
/** 得到Title值,並創建一個對話框,該對話框包含兩個按鈕
當兩個按鈕被點擊時,分別調用了MainActivity頁面的doPositiveClick和doNegativeClick方法 **/
String title = getArguments().getString("title");
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.ic_launcher)
.setTitle(title)
.setPositiveButton("確定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((MainActivity) getActivity()).doPositiveClick();
}
}
)
.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((MainActivity) getActivity()).doNegativeClick();
}
}
)
.create();
}
}
4.回到MainActivity中,使用代碼來調用該DialogFragment,代碼如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showDialog();
}
public void showDialog() {
DialogFragment newFragment = MyAlertDialogFragment.newInstance("兩個按鈕的對話框");
newFragment.show(getSupportFragmentManager(), "alert");
}
- 當然也可以將該Fragment作爲視圖結構中的一員,以此來調用該DialogFragment
FragmentTransaction ft = getFragmentManager().beginTransaction();
DialogFragment newFragment = MyDialogFragment.newInstance();
ft.add(R.id.embedded, newFragment);
ft.commit();