处理Menu功能菜单及"loading"对话框

来源:互联网 发布:婚前协议 知乎 编辑:程序博客网 时间:2024/06/05 15:13
一般的Android手机上都会有Menu键,那么我们怎么来处理Menu的菜单项和它的点击事件呢?下面这个例子就示范了“关于”对话框和“离开”等功能。

要为菜单添加菜单项,就要重写Activity中的OnCreateOptionsMenu方法,而要响应菜单的点击事件,就要重写OnOptionsItemsSelected方法:

[c-sharp] view plaincopyprint?
  1. public override bool OnCreateOptionsMenu(IMenu menu)  
  2. {  
  3.     menu.Add(0, 0, 0, new Java.Lang.String("关于"));  
  4.     menu.Add(0, 1, 1, new Java.Lang.String("退出"));  
  5.     return base.OnCreateOptionsMenu(menu);  
  6. }  
  7. public override bool OnOptionsItemSelected(IMenuItem item)  
  8. {  
  9.     bool b = base.OnOptionsItemSelected(item);  
  10.     switch (item.ItemId)  
  11.     {  
  12.         case 0:  
  13.             MessageBox.Show(this"信息""欢迎访问区健的博客:http://blog.csdn.net/ojlovecd");  
  14.             break;  
  15.         case 1:  
  16.             MessageBox.Confirm(this"提示""确定离开吗?"delegate { this.Finish(); }, delegate { });  
  17.             break;  
  18.     }  
  19.     return b;  
  20. }  

其中的MessageBox.Confirm是我新增的MessageBox类的静态方法,用以提示用户是否要执行操作:

[c-sharp] view plaincopyprint?
  1. public class MessageBox  
  2. {  
  3.     private static AlertDialog.Builder CreateDialog(Context ctx, string title, string message)  
  4.     {  
  5.         AlertDialog.Builder dlg = new AlertDialog.Builder(ctx);  
  6.         return dlg.SetTitle(title).SetMessage(message);  
  7.     }  
  8.     public static void Show(Context ctx, string title, string message)  
  9.     {  
  10.         CreateDialog(ctx, title, message).SetPositiveButton("确定"delegate { }).Show();  
  11.     }  
  12.     public static void Confirm(Context ctx, string title, string message, EventHandler<DialogClickEventArgs> okHandler, EventHandler<DialogClickEventArgs>  cancelHandler)  
  13.     {  
  14.         CreateDialog(ctx, title, message).SetPositiveButton("确定", okHandler).SetNegativeButton("取消", cancelHandler).Show();  
  15.     }  
  16.     public static void ShowErrorMessage(Context ctx, Exception ex)  
  17.     {  
  18.         Show(ctx, "错误", ex.Message);  
  19.     }  
  20. }  

 

常看见很多程序或网站里都有“加载中”的对话框,在Android里,要实现这个效果,实在是太easy了,通过ProgressDialog即可轻松完成。需要留意的是,ProgressDialog必须在后台程序运行完毕之前以Dismiss()方法来关闭并取得焦点的对话框,否则程序就会陷入无法终止的无穷循环中。所以,在下面的例子中,我们以线程Thread来模拟后台程序的运行,再通过线程运行完毕时,关闭这个加载中的动画对话框。

[c-sharp] view plaincopyprint?
  1. ProgressDialog pd = ProgressDialog.Show(v.Context, new Java.Lang.String("提示"), new Java.Lang.String("正在获取数据,请稍后……"), true);  
  2. Java.Lang.Thread th = new Java.Lang.Thread(() =>  
  3. {  
  4.     try  
  5.     {  
  6.         Java.Lang.Thread.Sleep(3000);  
  7.     }  
  8.     finally  
  9.     {  
  10.         pd.Dismiss();  
  11.     }  
  12. });  
  13. th.Start();  

 

怎么样是不是超级简单呢?最后,我们为AlerDialog增添选择功能来结束这一次的学习。

[c-sharp] view plaincopyprint?
  1. AlertDialog.Builder dlg = new AlertDialog.Builder(v.Context);  
  2. string[] items = {  
  3.     "猪肉干",  
  4.     "牛肉干",  
  5.     "猪肉松",  
  6.     "牛肉松",  
  7.     "猪肉柳",  
  8.     "牛肉柳",  
  9.     "猪肉粒",  
  10.     "牛肉粒"  
  11. };  
  12. dlg.SetTitle("请选择你最喜欢的黄胜记").SetItems(items,  
  13. (sender, e) =>  
  14. {  
  15.     MessageBox.Show(v.Context, ""string.Format("你最喜欢的是:{0}", items[(int)e.Which]));  
  16. });  
  17. dlg.Show();  

 

 

出自

原创粉丝点击