安卓基礎(十七)

對話框

目標人羣:沒有基礎的安卓初學者
知識點: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();

擴展閱讀

  1. DialogFragment的官方API
  2. Dialogs的官方API
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章