Android下关于Dialog的学习
2012-01-06 17:54
351 查看
随着工作的变动。最近又要开始捣鼓Android了。这几天正在集中学习,一边阅读项目源码一边学习各个Android Api。哎哎一下子往脑袋里塞这么多东西感觉快爆掉了。于是决定将自己的学习成果和心得记录下来,免得忘记了。
下面是简单的源码。
通过代码运行可以验证函数的调用顺序(上面是贴的是最终版,要验证顺序可以自己稍微修改下)。
今天有三个需要注意的地方:
1.注释的代码若取消注释会导致程序异常退出,原因是在显示Dialog时尝试更新activity的控件。看来是不允许这样干的了。具体原因还没探究。总之先记录一下。
2.showDialog(int)传入不同的值会导致调用对应的onCreateDialog。即
showDialog(0);
showDialog(0);会是这样的调用顺序(onCreateDialog->onPrepareDialog )->onPrepareDialog。而
showDialog(0);
showDialog(1);会是这样的调用顺序(onCreateDialog->onPrepareDialog )->(onCreateDialog->onPrepareDialog)。
3.AlertDialog是Dialog的一个常用子类。简单的使用方法如代码示例。也可以自定义继承自Dialog的消息框。
http://hi.baidu.com/lck0502/blog/item/9029e709060aeaa22fddd474.html这一篇里也有详细的介绍。
Dialog
先记录下dialog的学习吧。除了Dialog自己,Activity中有几个相关的方法。onCreateDialog(int, Bundle) 第一次调用showDialog时由系统调用
onPrepareDialog(int, Dialog, Bundle) 第二次及以上调用showDialog时由系统调用
showDialog(int, Bundle) 当需要显示Dialog时在代码里调用。int参数会传入上两个函数中
dismissDialog(int) 当需要隐藏Dialog时调用。
removeDialog(int) 当需要移除Dialog时调用。
前两个函数调用顺序是: onCreateDialog-> onPrepareDialog
不幸的是Android 3.0以后这些方法已经不被推荐使用了。我因为项目代码里有用到,于是顺便也研究一下。之后要看看推荐使用的DialogFragment以及FragmentManager。
下面是简单的源码。
package lily.android.dialogtest; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.os.Bundle; import android.widget.Button; import android.view.View; import android.widget.TextView; import android.content.DialogInterface; public class AndroidDialogTestActivity extends Activity { //private TextView mTitleView = null; private int mClickCount = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //mTitleView = (TextView)findViewById(R.id.textView1); Button button = (Button)findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { showDialog(mClickCount); } }); } /** Called when the dialog is first created. */ @Override protected Dialog onCreateDialog(int id) { Dialog dialog = null; switch(id) { case 0: mClickCount++; dialog = new AlertDialog.Builder(this).setTitle("Fool Test") .setMessage("You are a stupid guy aha~!") .setPositiveButton("OK", new MyDialogListener()).create(); break; case 1: mClickCount++; dialog = new AlertDialog.Builder(this).setTitle("Smart Test") .setMessage("You are a not smart at all!") .setPositiveButton("OK", new MyDialogListener()).create(); break; } return dialog; } /** Called when the dialog is called after created. */ @Override protected void onPrepareDialog(int id, Dialog dialog){ //mTitleView.setText(mClickCount); switch(id) { case 0: ((AlertDialog)dialog).setMessage("You are still a stupid guy aha~!" + mClickCount); break; case 1: ((AlertDialog)dialog).setMessage("You are not smart at all aha~!" + mClickCount); break; } } private class MyDialogListener implements DialogInterface.OnClickListener{ @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } } }
通过代码运行可以验证函数的调用顺序(上面是贴的是最终版,要验证顺序可以自己稍微修改下)。
今天有三个需要注意的地方:
1.注释的代码若取消注释会导致程序异常退出,原因是在显示Dialog时尝试更新activity的控件。看来是不允许这样干的了。具体原因还没探究。总之先记录一下。
2.showDialog(int)传入不同的值会导致调用对应的onCreateDialog。即
showDialog(0);
showDialog(0);会是这样的调用顺序(onCreateDialog->onPrepareDialog )->onPrepareDialog。而
showDialog(0);
showDialog(1);会是这样的调用顺序(onCreateDialog->onPrepareDialog )->(onCreateDialog->onPrepareDialog)。
3.AlertDialog是Dialog的一个常用子类。简单的使用方法如代码示例。也可以自定义继承自Dialog的消息框。
http://hi.baidu.com/lck0502/blog/item/9029e709060aeaa22fddd474.html这一篇里也有详细的介绍。
相关文章推荐
- Android学习问题:关于AlertDialog中自定义布局带有的EditText无法弹出键盘
- Android 关于BottomDialogSheet 与Layout擦出爱的火花?
- 关于Android 事件分发机制的学习
- 关于Android零基础学习的思考
- Android学习之ProgressDialog
- Android学习--关于setWidth()和setHeight()没反应的问题
- Android中关于JNI 的学习(一)对于JNIEnv的一些认识
- Android DialogFragment 学习和理解
- osg for android 学习之八:关于StateSet
- 关于android创建对话框报错The method setPositiveButton(int, DialogInterface.OnClickListener) in the type Alert
- 关于Android中View的绘制流程的学习(一)
- Android学习自定义Dialog
- 关于Android零基础学习的思考
- 关于android生命周期的一些学习总结
- 关于android服务器推送解决方案的学习
- Android中关于系统Dialog无法全屏的问题
- 在A20上演示老罗的Android硬件抽象层(HAL)概要介绍和学习计划5--关于APP部分
- 【android学习】关于textview.setEllipsize(TextUtils.TruncateAt.valueOf("END"));失效
- android学习关于LayoutInflater的使用
- Android学习——对话框Dialog