国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android利用Intent實現(xiàn)記事本功能(NotePad)

2019-12-12 06:11:53
字體:
供稿:網(wǎng)友

本文實例為大家分享了Intent如何實現(xiàn)一個簡單的記事本功能的演示過程,供大家參考,具體內(nèi)容如下

1、運行截圖

單擊右上角【…】會彈出【添加】菜單項,長按某條記錄會彈出快捷菜單【刪除】項。

2、主要設(shè)計步驟

(1)添加引用

鼠標(biāo)右擊【引用】à【添加引用】,在彈出的窗口中勾選“System.Data”和“System.Data.SQlite”,如下圖所示:

注意:不需要通過NuGet添加SQLite程序包,只需要按這種方式添加即可。

(2)添加圖片

到Android SDK API 23的Samples的NotePad例子下找到app_notes.png,將其添加到該項目中,并將其換名為ch12_app_notes.png。

(3)添加ch1205_NoteEditor.axml文件

<?xml version="1.0" encoding="utf-8"?><view xmlns:android="http://schemas.android.com/apk/res/android"  class="MyDemos.SrcDemos.ch1205LinedEditText"  android:id="@+id/note"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:padding="5dip"  android:scrollbars="vertical"  android:fadingEdge="vertical"  android:gravity="top"  android:textSize="22sp"  android:capitalize="sentences" />

(4)添加ch1205_Main.axml文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="wrap_content"  android:orientation="horizontal"  android:background="#ffffff"  android:padding="10px"> <ImageView   android:id="@+id/icon"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:src="@drawable/ch12_app_notes" /> <LinearLayout   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:orientation="vertical"   android:paddingTop="6px">  <TextView    android:id="@+id/body"    android:layout_width="wrap_content"    android:layout_height="wrap_content" />  <TextView    android:id="@+id/modified"    android:layout_width="wrap_content"    android:layout_height="wrap_content" /> </LinearLayout></LinearLayout> 

(5)添加ch1205Note.cs文件

using System;namespace MyDemos.SrcDemos{  class ch1205Note : Java.Lang.Object  {    public long Id { get; set; }    public string Body { get; set; }    public DateTime ModifiedTime { get; set; }    public ch1205Note()    {      Id = -1L;      Body = string.Empty;    }    public ch1205Note(long id, string body, DateTime modified)    {      Id = id;      Body = body;      ModifiedTime = modified;    }    public override string ToString()    {      return ModifiedTime.ToString();    }  }} 

(6)添加ch1205LinedEditText.cs文件

using Android.Content;using Android.Runtime;using Android.Widget;using Android.Graphics;using Android.Util;namespace MyDemos.SrcDemos{  [Register("MyDemos.SrcDemos.ch1205LinedEditText")]  class ch1205LinedEditText : EditText  {    private Rect rect;    private Paint paint;    // 為了LayoutInflater需要提供此構(gòu)造函數(shù)    public ch1205LinedEditText(Context context, IAttributeSet attrs)      : base(context, attrs)    {      rect = new Rect();      paint = new Paint();      paint.SetStyle(Android.Graphics.Paint.Style.Stroke);      paint.Color = Color.LightGray;    }    protected override void OnDraw(Canvas canvas)    {      int count = LineCount;      for (int i = 0; i < count; i++)      {        int baseline = GetLineBounds(i, rect);        canvas.DrawLine(rect.Left, baseline + 1, rect.Right, baseline + 1, paint);      }      base.OnDraw(canvas);    }  }}

(7)添加ch1205NoteRepository.cs文件

using System;using System.Collections.Generic;using Mono.Data.Sqlite;namespace MyDemos.SrcDemos{  class ch1205NoteRepository  {    private static string db_file = "notes.db3";    private static SqliteConnection GetConnection()    {      var dbPath = System.IO.Path.Combine(        System.Environment.GetFolderPath(          System.Environment.SpecialFolder.Personal), db_file);      bool exists = System.IO.File.Exists(dbPath);      if (!exists) SqliteConnection.CreateFile(dbPath);      var conn = new SqliteConnection("Data Source=" + dbPath);      if (!exists) CreateDatabase(conn);      return conn;    }    private static void CreateDatabase(SqliteConnection connection)    {      var sql = "CREATE TABLE ITEMS (Id INTEGER PRIMARY KEY AUTOINCREMENT, Body ntext, Modified datetime);";      connection.Open();      using (var cmd = connection.CreateCommand())      {        cmd.CommandText = sql;        cmd.ExecuteNonQuery();      }      // Create a sample note to get the user started      sql = "INSERT INTO ITEMS (Body, Modified) VALUES (@Body, @Modified);";      using (var cmd = connection.CreateCommand())      {        cmd.CommandText = sql;        cmd.Parameters.AddWithValue("@Body", "今天有個約會");        cmd.Parameters.AddWithValue("@Modified", DateTime.Now);        cmd.ExecuteNonQuery();      }      connection.Close();    }    public static IEnumerable<ch1205Note> GetAllNotes()    {      var sql = "SELECT * FROM ITEMS;";      using (var conn = GetConnection())      {        conn.Open();        using (var cmd = conn.CreateCommand())        {          cmd.CommandText = sql;          using (var reader = cmd.ExecuteReader())          {            while (reader.Read())            {              yield return new ch1205Note(                reader.GetInt32(0),                reader.GetString(1),                reader.GetDateTime(2));            }          }        }      }    }    public static ch1205Note GetNote(long id)    {      var sql = "SELECT * FROM ITEMS WHERE Id = id;";      using (var conn = GetConnection())      {        conn.Open();        using (var cmd = conn.CreateCommand())        {          cmd.CommandText = sql;          using (var reader = cmd.ExecuteReader())          {            if (reader.Read())              return new ch1205Note(reader.GetInt32(0), reader.GetString(1), reader.GetDateTime(2));            else              return null;          }        }      }    }    public static void DeleteNote(ch1205Note note)    {      var sql = string.Format("DELETE FROM ITEMS WHERE Id = {0};", note.Id);      using (var conn = GetConnection())      {        conn.Open();        using (var cmd = conn.CreateCommand())        {          cmd.CommandText = sql;          cmd.ExecuteNonQuery();        }      }    }    public static void SaveNote(ch1205Note note)    {      using (var conn = GetConnection())      {        conn.Open();        using (var cmd = conn.CreateCommand())        {          if (note.Id < 0)          {            // Do an insert            cmd.CommandText = "INSERT INTO ITEMS (Body, Modified) VALUES (@Body, @Modified); SELECT last_insert_rowid();";            cmd.Parameters.AddWithValue("@Body", note.Body);            cmd.Parameters.AddWithValue("@Modified", DateTime.Now);            note.Id = (long)cmd.ExecuteScalar();          }          else          {            // Do an update            cmd.CommandText = "UPDATE ITEMS SET Body = @Body, Modified = @Modified WHERE Id = @Id";            cmd.Parameters.AddWithValue("@Id", note.Id);            cmd.Parameters.AddWithValue("@Body", note.Body);            cmd.Parameters.AddWithValue("@Modified", DateTime.Now);            cmd.ExecuteNonQuery();          }        }      }    }  }} 

(8)添加ch1205NoteAdapter.cs文件

using Android.App;using Android.Content;using Android.Widget;namespace MyDemos.SrcDemos{  class ch1205NoteAdapter : ArrayAdapter  {    private Activity activity;    public ch1205NoteAdapter(Activity activity, Context context, int textViewResourceId, ch1205Note[] objects)      : base(context, textViewResourceId, objects)    {      this.activity = activity;    }    public override Android.Views.View GetView(int position, Android.Views.View convertView, Android.Views.ViewGroup parent)    {      //Get our object for this position      var item = (ch1205Note)GetItem(position);      // 如果convertView不為null則重用它,否則從當(dāng)前布局中填充(inflate)它。      // 由于這種方式不是每次都填充一個新的view,因此可提高性能。      var view = (convertView ?? activity.LayoutInflater.Inflate(        Resource.Layout.ch1205_Main, parent, false)) as LinearLayout;      view.FindViewById<TextView>(Resource.Id.body).Text = Left(item.Body.Replace("/n", " "), 25);      view.FindViewById<TextView>(Resource.Id.modified).Text = item.ModifiedTime.ToString();      return view;    }    private string Left(string text, int length)    {      if (text.Length <= length) return text;      return text.Substring(0, length);    }  }} 

(9)添加ch1205NoteEditorActivity.cs文件

using Android.App;using Android.Content;using Android.OS;using Android.Widget;using Android.Content.PM;namespace MyDemos.SrcDemos{  [Activity(Label = "ch1205NoteEditorActivity",   ScreenOrientation = ScreenOrientation.Sensor,  ConfigurationChanges = ConfigChanges.KeyboardHidden | ConfigChanges.Orientation)]  public class ch1205NoteEditorActivity : Activity  {    private ch1205Note note;    private EditText text_view;    protected override void OnCreate(Bundle savedInstanceState)    {      base.OnCreate(savedInstanceState);      SetContentView(Resource.Layout.ch1205_NoteEditor);      text_view = FindViewById<EditText>(Resource.Id.note);      var note_id = Intent.GetLongExtra("note_id", -1L);      if (note_id < 0) note = new ch1205Note();      else note = ch1205NoteRepository.GetNote(note_id);    }    protected override void OnResume()    {      base.OnResume();      text_view.SetTextKeepState(note.Body);    }    protected override void OnPause()    {      base.OnPause();      // 如果是新建的記事本且沒有內(nèi)容,不保存直接返回。      if (IsFinishing && note.Id == -1 && text_view.Text.Length == 0)        return;      // 保存記事本      note.Body = text_view.Text;      ch1205NoteRepository.SaveNote(note);    }  }}

(10)添加ch1205NotePadMain.cs文件

using System.Linq;using Android.App;using Android.Content;using Android.OS;using Android.Views;using Android.Widget;namespace MyDemos.SrcDemos{  [Activity(Label = "ch1205NotePadMain")]  public class ch1205NotePadMain : ListActivity  {    // 菜單項    public const int MenuItemDelete = Menu.First;    public const int MenuItemInsert = Menu.First + 1;    protected override void OnCreate(Bundle savedInstanceState)    {      base.OnCreate(savedInstanceState);      SetDefaultKeyMode(DefaultKey.Shortcut);      ListView.SetOnCreateContextMenuListener(this);      PopulateList();    }    public void PopulateList()    {      // 獲取存放到列表中的所有記事本項      var notes = ch1205NoteRepository.GetAllNotes();      var adapter = new ch1205NoteAdapter(this, this, Resource.Layout.ch1205_Main, notes.ToArray());      ListAdapter = adapter;    }    public override bool OnCreateOptionsMenu(IMenu menu)    {      base.OnCreateOptionsMenu(menu);      menu.Add(0, MenuItemInsert, 0, "添加")        .SetShortcut('3', 'a')        .SetIcon(Android.Resource.Drawable.IcMenuAdd);      return true;    }    public override bool OnOptionsItemSelected(IMenuItem item)    {      switch (item.ItemId)      {        case MenuItemInsert: // 通過intent添加新項          var intent = new Intent(this, typeof(ch1205NoteEditorActivity));          intent.PutExtra("note_id", -1L);          StartActivityForResult(intent, 0);          return true;      }      return base.OnOptionsItemSelected(item);    }    public override void OnCreateContextMenu(IContextMenu menu, View view, IContextMenuContextMenuInfo menuInfo)    {      var info = (AdapterView.AdapterContextMenuInfo)menuInfo;      var note = (ch1205Note)ListAdapter.GetItem(info.Position);      menu.Add(0, MenuItemDelete, 0, "刪除");    }    public override bool OnContextItemSelected(IMenuItem item)    {      var info = (AdapterView.AdapterContextMenuInfo)item.MenuInfo;      var note = (ch1205Note)ListAdapter.GetItem(info.Position);      switch (item.ItemId)      {        case MenuItemDelete: // 刪除該記事本項          ch1205NoteRepository.DeleteNote(note);          PopulateList();          return true;      }      return false;    }    protected override void OnListItemClick(ListView l, View v, int position, long id)    {      var selected = (ch1205Note)ListAdapter.GetItem(position);      // 執(zhí)行activity,查看/編輯當(dāng)前選中的項      var intent = new Intent(this, typeof(ch1205NoteEditorActivity));      intent.PutExtra("note_id", selected.Id);      StartActivityForResult(intent, 0);    }    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)    {      base.OnActivityResult(requestCode, resultCode, data);      // 當(dāng)列表項發(fā)生變化時,這里僅關(guān)心如何刷新它,并沒有處理選定的項      PopulateList();    }  }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新丰县| 手游| 鄯善县| 双辽市| 万源市| 五原县| 大城县| 乐陵市| 紫阳县| 泗水县| 会泽县| 定南县| 松潘县| 怀仁县| 伽师县| 潜江市| 连城县| 长武县| 汉川市| 文化| 中卫市| 抚松县| 东丰县| 赞皇县| 缙云县| 东台市| 马山县| 察雅县| 绥棱县| 商水县| 新郑市| 肇源县| 法库县| 军事| 武宣县| 陈巴尔虎旗| 喀什市| 大关县| 兰州市| 新疆| 南涧|