展会信息港展会大全

android DialogFragment简单应用
来源:互联网   发布日期:2015-09-29 10:59:02   浏览:1641次  

导读:一个简单的DialogFragment应用 因为Activity的showDialog(int id)被弃用了,要使用DatePickerDialog,TimePickerDialog,Al...

一个简单的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");

}

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港