Xamarin.Android 记事本(二)自定义AlertDialog

导读

   1.自定义一个AlertDialog

   2.添加一条数据

正文

  记事本应当有一个添加功能,这里我打算在右上角放一个item,然后点击这个item弹出一个对话框,输入名称,点击确定跳转到另一个activity进行添加数据。

 public override bool OnCreateOptionsMenu(IMenu menu)
        {
            var m1 = menu.Add(0, 1, 0, "新建");
            m1.SetShowAsActionFlags(ShowAsAction.IfRoom | ShowAsAction.WithText); 
            return true;
        }

首先我们添加了一个item

就是右上角的新建按钮,然后我们需要自定义一个AlertDialog,这样我们才能从AlertDialog中获取edittext的值

首先我们新建一个名为EditText的布局文件,往里面添加一个edittext,设置ID为EditTitle

然后我们重写OnOptionsItemSelected

public override bool OnOptionsItemSelected(IMenuItem item)
         {
             switch (item.ItemId)
             {
                 case 1:
                     {
                         Android.App.AlertDialog.Builder builder = new AlertDialog.Builder(this);
                         AlertDialog ad = builder.Create();
                         ad.SetTitle("请输入标题");                         
                         ad.SetView(new EditText(this));
                         LayoutInflater inflater = LayoutInflater.From(this);
                         View layout = inflater.Inflate(Resource.Layout.EditText, null);                      
                         ad.SetView(layout);
                         ad.SetButton("完成", (s, e) =>
                         {
                             EditText orderBookNum = (EditText)layout.FindViewById(Resource.Id.EditTitle);
                             var intent = new Intent(this, typeof(Addnote));
                             intent.PutExtra("title", orderBookNum.Text);
                             StartActivity(intent);
                             this.Finish();
                         });
                         ad.SetButton2("取消", (s, e) => { });
                         ad.Show();


                     }break;
             }
             return true;
         }

这里我们把获取到的值传递到了Addnote活动中(添加事件)

最后效果图

获取到edittitle的值之后,我们进入addnote活动中进行添加数据

重写OnCreateOptionsMenu并添加事件

 public override bool OnCreateOptionsMenu(IMenu menu)
        {
            var m1 = menu.Add(0, 1, 0, "保存");
            m1.SetShowAsActionFlags(ShowAsAction.IfRoom | ShowAsAction.WithText);
            return true;
        }
        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            switch (item.ItemId)
            {
                case 1:
                    {
                        Anote();
                        
                    } break;
                case Android.Resource.Id.Home:
                    {
                        var intent = new Intent(this, typeof(Activity1));
                        StartActivity(intent);
                        this.Finish();
                    } break;
            }
            return true;
        }

这里我写了一个Anote方法,就是添加数据的方法

void Anote()
        {
            DateTime now = DateTime.Now;
            Sqlite dbHelper = new Sqlite(this);
            SQLiteDatabase db = dbHelper.WritableDatabase;
            ContentValues ncv = new ContentValues();
            var title = Intent.GetStringExtra("title");
            ncv.Put("title", title);
            ncv.Put("context", edtext.Text);
            ncv.Put("time", now.ToString("yyyy-MM-dd"));
            long id = db.Insert("NoteBooksql", null, ncv);
            var intentAct2 = new Intent(this, typeof(Activity1));
            StartActivity(intentAct2);
            if (id >= 0)
            {
                Toast.MakeText(this, "添加成功", ToastLength.Short).Show();
            }
            else
            {
                Toast.MakeText(this, "添加失败", ToastLength.Short).Show();
            }
            
            this.Finish();
        }

接收传递过来的edittitle值,insert一下,>=0则添加成功,-1则添加失败

最后效果图

原文地址:https://www.cnblogs.com/lihuazou/p/4335469.html