您的位置:首页 > 移动开发 > Android开发

android DialogFragment简单应用

2013-12-13 18:48 549 查看
一个简单的DialogFragment应用 

因为Activity的showDialog(int id)被弃用了,要使用DatePickerDialog,TimePickerDialog,AlterDialog都要继承DialogFragment. 

布局文件就一个Button,就不写出来了. 

MainActivity.java 

Java代码  


package sky.dialog;  

  

import android.app.Activity;  

import android.os.Bundle;  

import android.view.View;  

import android.view.View.OnClickListener;  

import android.widget.Button;  

  

public class MainActivity extends Activity {  

    /** Called when the activity is first created. */  

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);  

        Button bt = (Button) findViewById(R.id.showDialog);  

        bt.setOnClickListener(new OnClickListener() {  

              

            @Override  

            public void onClick(View v) {  

                // TODO Auto-generated method stub  

                showDialog();  

            }  

        });  

    }  

    public void showDialog()  

    {  

        //根据传进的参数来实例化DialogFragment.  

        MyDialogFragment newDialog = MyDialogFragment.newInstance(MyDialogFragment.ALTER_DIALOG);  

//      MyDialogFragment newDialog = MyDialogFragment.newInstance(MyDialogFragment.DATE_PICKER_DIALOG);  

//      MyDialogFragment newDialog = MyDialogFragment.newInstance(MyDialogFragment.TIME_PICKER_DiALOG);  

        newDialog.show(getFragmentManager(), "alert msg");  

    }  

}  

MyDialogFragment.java 

Java代码  


package sky.dialog;  

  

import android.app.DatePickerDialog;  

import android.app.DatePickerDialog.OnDateSetListener;  

import android.app.AlertDialog;  

import android.app.Dialog;  

import android.app.DialogFragment;  

import android.app.TimePickerDialog;  

import android.app.TimePickerDialog.OnTimeSetListener;  

import android.content.DialogInterface;  

import android.os.Bundle;  

import android.widget.DatePicker;  

import android.widget.TimePicker;  

  

public class MyDialogFragment extends DialogFragment {  

    public static final int DATE_PICKER_DIALOG = 1;  

    public static final int ALTER_DIALOG = 2;  

    public static final int TIME_PICKER_DiALOG = 3;  

  

    public static MyDialogFragment newInstance(int title) {  

        MyDialogFragment myDialogFragment = new MyDialogFragment();  

        Bundle bundle = new Bundle();  

        bundle.putInt("title", title);  

        myDialogFragment.setArguments(bundle);  

        return myDialogFragment;  

    }  

  

    @Override  

    public Dialog onCreateDialog(Bundle savedInstanceState) {  

        // TODO Auto-generated method stub  

        int args = getArguments().getInt("title");  

        //根据传进来的参数选择创建哪种Dialog  

        switch (args) {  

        case DATE_PICKER_DIALOG:  

            return new DatePickerDialog(getActivity(), new OnDateSetListener() {  

                public void onDateSet(DatePicker view, int year, int monthOfYear,  

                        int dayOfMonth) {  

                    // TODO Auto-generated method stub  

                    //月是从0开始的  

                    System.out.println( "year-->" + year + "  month-->" + monthOfYear  

                            + "  day-->" + dayOfMonth);  

                }  

            }, 2012,3, 26);  

        case ALTER_DIALOG:  

            return new AlertDialog.Builder(getActivity())  

                .setIcon(R.drawable.ic_launcher)  

                .setTitle(getTag())  

                .setPositiveButton("ok",  

                        new DialogInterface.OnClickListener() {  

                public void onClick(DialogInterface dialog, int whichButton) {  

                    //点击ok触发的事件  

                    System.out.println("click ok!");  

                }  

                })  

            .setNegativeButton("cancle",  

                    new DialogInterface.OnClickListener() {  

                public void onClick(DialogInterface dialog, int whichButton) {  

                    //点击cancle触发的时间  

                    System.out.println("click cancle");  

                }  

                })  

                .create();  

        case TIME_PICKER_DiALOG:  

            return new TimePickerDialog(getActivity(),new OnTimeSetListener() {  

                  

                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {  

                    // TODO Auto-generated method stub  

                    System.out.println("hour-->"+hourOfDay+"  minute-->"+ minute);  

                }  

            }, 13, 23, true);  

        }  

        return null;  

    }  

  

}  

=========================================================================================================================

可创建的另一种碎片类型是对话框碎片。一个对话框碎片浮动在活动上方,并且以模态方式显示。当需要获得用户的响应,然后才能继续执行操作的时候,对话框碎片十分有用。为了创建一个对话框碎片,需要扩展DialogFragment基类。

下面的“试一试”展示了创建对话框碎片的方法。

试一试 创建并使用一个对话碎片

DialogFragmentExample.zip代码文件可以在Wrox.com上下载

(1) 使用Eclipse创建一个Android项目,并把它命名为DialogFragmentExample。

(2) 向包里添加一个Java类文件并将其命名为Fragment1。

(3) 使用如下代码填充Fragment1.java文件。

package net.learn2develop.DialogFragmentExample;

import android.app.AlertDialog;

import android.app.Dialog;

import android.app.DialogFragment;

import android.content.DialogInterface;

import android.os.Bundle;

public class Fragment1 extends DialogFragment {

     static Fragment1 newInstance(String title) {

          Fragment1 fragment = new Fragment1();

          Bundle args = new Bundle();

          args.putString("title", title);

          fragment.setArguments(args);

          return fragment;

     }

     @Override

     public Dialog onCreateDialog(Bundle savedInstanceState) {

          String title = getArguments().getString("title");

          return new AlertDialog.Builder(getActivity())

          .setIcon(R.drawable.ic_launcher)

          .setTitle(title)

          .setPositiveButton("OK",

                    new DialogInterface.OnClickListener() {

               public void onClick(DialogInterface dialog,

int whichButton) {

                    ((DialogFragmentExampleActivity)

                              getActivity()).doPositiveClick();

               }

          })

          .setNegativeButton("Cancel",

                    new DialogInterface.OnClickListener() {

               public void onClick(DialogInterface dialog,

                         int whichButton) {

                    ((DialogFragmentExampleActivity)

                              getActivity()).doNegativeClick();

               }

        }).create();

     }       

}

(4) 使用下列粗体显示的代码填充DialogFragmentExampleActivity.java文件。

package net.learn2develop.DialogFragmentExample;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

public class DialogFragmentExampleActivity extends Activity {

     /** Called when the activity is first created. */

     @Override

     public void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);

          setContentView(R.layout.main);

       

          Fragment1 dialogFragment = Fragment1.newInstance(

                    "Are you sure you want to do this?");

               dialogFragment.show(getFragmentManager(), "dialog");  

     }

   

     public void doPositiveClick() {

          //---perform steps when user clicks on OK---

          Log.d("DialogFragmentExample", "User clicks on OK");

     }

     public void doNegativeClick() {

          //---perform steps when user clicks on Cancel---

          Log.d("DialogFragmentExample", "User clicks on Cancel");

     }

}

(5) 按F11键在Android模拟器上调试应用程序。图4-26所示的碎片在一个警告对话框中显示。单击OK按钮或Cancel按钮,观察显示的消息。

示例说明

为创建一个对话碎片,首先Java类要扩展DialogFragment基类:

public class Fragment1 extends DialogFragment{

}

在本例中,创建了一个警告对话框,这是一个显示一条消息及可选按钮的对话框窗口。在Fragment1类中,定义了newInstance()方法:

    static Fragment1 newInstance(String title) {

         Fragment1 fragment = new Fragment1();

         Bundle args = new Bundle();

         args.putString("title", title);

         fragment.setArguments(args);

         return fragment;

    }

newInstance()方法允许创建碎片的一个新实例,同时它接受一个指定警告对话框中要显示的字符串(title)的参数。title随后存储在一个Bundle对象里供之后使用。

接下来定义了onCreateDialog()方法,该方法在onCreate()之后、onCreateView()之前调用:

@Override

public Dialog onCreateDialog(Bundle savedInstanceState) {

     String title = getArguments().getString("title");

        return new AlertDialog.Builder(getActivity())

        .setIcon(R.drawable.ic_launcher)

        .setTitle(title)

        .setPositiveButton("OK",

                  new DialogInterface.OnClickListener() {

             public void onClick(DialogInterface dialog,

                       int whichButton) {

                  ((DialogFragmentExampleActivity)

                            getActivity()).doPositiveClick();

             }

        })

        .setNegativeButton("Cancel",

new DialogInterface.OnClickListener() {

             public void onClick(DialogInterface dialog,

int whichButton) {

                  ((DialogFragmentExampleActivity)

getActivity()).doNegativeClick();

             }

        }).create();

   }     

在这里,创建的警告对话框有两个按钮:OK和Cancel。要在该对话框中显示的字符串从保存在Bundle对象中的title参数中获取。

为了显示对话框碎片,创建它的一个实例并调用它的show()方法:

    Fragment1 dialogFragment = Fragment1.newInstance(

               "Are you sure you want to do this?");

          dialogFragment.show(getFragmentManager(), "dialog"); 

 

还需要实现两种方法:doPostiveClick()和doNegativeClick(),分别用于处理用户单击OK按钮或Cancel按钮的情况。

     public void doPositiveClick() {

          //---perform steps when user clicks on OK---

          Log.d("DialogFragmentExample", "User clicks on OK");

     }

     public void doNegativeClick() {

          //---perform steps when user clicks on Cancel---

          Log.d("DialogFragmentExample", "User clicks on Cancel");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息