可能是楼主看的书太老了,所以才会有这种问题。但是我相信还有其他的朋友会遇到相同的问题,所以今天我就对Android中在Activity中创建Dialog的方法进行一下简短的讨论。
先看一个大家都很熟悉的方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showDialog(0);
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id){
case 0:
return ProgressDialog.show(this, "A progressDialog", "Please wait", true);
}
return null;
}
但是其实这种方式在Android API Level 13就已经@Deprecated了,那么有什么替代方法呢?
Google官方推荐替代方法如下:
使用DialogFragment
:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showMyDialog();
}
private void showMyDialog() {
myDialog myDialog = new myDialog();
Bundle bundle = new Bundle();
bundle.putString("title", "A progressbar");
bundle.putString("description", "Please wait");
myDialog.setArguments(bundle);
// myDialog.setTargetFragment(this);
myDialog.show(getFragmentManager(), "tag");
}
});
}
class myDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
//使用bundle传递一系列dialog需要的参数
Bundle bundle = getArguments();
// setContentView(R.layout.layout_dialog);
return new ProgressDialog.Builder(getActivity())
.setTitle(bundle.getString("title"))
.setIcon(R.drawable.ic_launcher)
.setMessage(bundle.getString("description"))
//能使用单独的XMl文件对dialog布局
// .setView(R.layout.layout_dialog)
.create();
}
}
说白了就是现在Google推荐使用对Dialog操作的API,而不是直接对Dialog本身进行操作,而且还可以借用到Fragment的优势。这种方法通过创建一个继承自DialogFragment的类实现(如上)。
那么如果只是创建一个简单的Yes/No的对话框,这样做是不是有一点“用牛刀杀鸡”的意味呢?那么可以像下面这样做:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder alertDialog = new ProgressDialog.Builder(MainActivity.this)
.setTitle("Yes/No")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setMessage("This is a YES/NO question.");
alertDialog.show();
}
});