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");
}
因为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实现表情 抓取新浪表情
- 详解Android解析Xml的三种方式——DOM、SAX以及XMLpull
- android开发环境遇到adt无法启动的问题分析及解决方法
- Android开发 旋转屏幕导致Activity重建解决方法
- Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)
- Android开发技巧之ViewStub控件惰性装载
- android开发之横向滚动/竖向滚动的ListView(固定列头)
- Android开发技巧之我的菜单我做主(自定义菜单)
- 根据根据图片的url怎么取得图片ImageView对象
- [转] ADB server didn't ACK
- android开发学习如何一体化?从入门到高端开发的路如何走?
- Android入门到精通详解 电子书下载
- 新浪OAuth同步方案(测试成功)
- Android开发中设置无标题
- Android JNI中的常用方法
- 如何让Android横竖屏切换时不销毁当前activity
- 亿android开发一周年记!
- 推荐本人关于Android的一些学习资料
- Android studio 0.3.0发布
- java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()