這次記錄的是滾動條跟sqlite創建、存儲和讀取。
先說滾動條相關,這個是比較簡單的知識點。
當有一屏的東西需要填寫的時候例如下圖

我們都知道如果點擊第一個文本框則會出現輸入法。但是如果沒有滾動條的話,只能依靠輸入法中的回車一個一個的向下移動(雖然現在輸入法都帶自我關閉功能),很不友好,那么就需要滾動條,看了一下布局屬性有滾動條,但是使用起來不好使。隱約想起來,安卓有滾動條控件,就在左邊找了一下,果真找到這個玩意了。如下圖

但是這玩意如何使用呢,又進行了一次搜索,原來這個東西可以套在布局標簽的外面,讓整個布局帶有滾動條(這個滾動條是橫向和縱向都帶的,可以通過屬性關閉)。

套在外面發現划紅線了,生成的時候報錯。
錯誤 3 未定義命名空間前綴“android”。
解決辦法是把
xmlns:android="http://schemas.android.com/apk/res/android"
挪動到滾動條里面即可。感覺這句話的意思是定義這個標簽里面的所有標簽都執行安卓這個定義。
這樣在出現輸入法的時候就可以出現滾動條了。
簡單吧,更多屬性可以自行研究。
接下來說一下 本地庫 sqlite
首先他跟 T-sql語法稍微有一絲不同大部分相似,不同之處以后一點點的說,一次性全寫了我也記不住。
在網上和書上看到很多創建數據庫的方式,不過沒有一個完全正確的,書上的更扯蛋,很多內容已經被整合沒了。連引用空間都不一樣了(書上的語法貌似是很老的語法),所以這些內容只能作為線索來參考,甚至需要去參考java的安卓開發(布局方面請直接參考java開發方式)。
所以我找到了一個簡單明了的創建本地庫的方式,也總結了一套自己創建本地庫的基本原則。
1,在肯定需要使用的時候創建
2,沒必要創建的時候不創建
3,如果整套程序都需要使用本地庫,那么在程序運行最初就創建
4,如果有條件手動創建好直接開發使用
創建和使用數據庫需要引用
using Android.Database.Sqlite;
有些書上和一些網上資料要引用mono,但是在我這個版本里面已經不存在了(net4.5)。
代碼如下
SQLiteDatabase Database = null;//在最外稱定義這個 /// <summary> /// 創建數據庫 /// </summary> private void CreateData() { string strDataName = "PhoneBook.db3"; Database = this.OpenOrCreateDatabase(strDataName, FileCreationMode.Private, null); string strTable = "create table if not exists book(name,sex,age,phone)"; Database.ExecSQL(strTable); }
在最外層定義數據庫連接方法,因為一會有使用(因為是demo所以這么些,正式項目肯定要寫的比現在的好一些)
定義創建方法定義數據庫名稱,DB3是數據庫擴展名,
OpenOrCreateDatabase 的方法大概意思是如果這個數據庫存在則打開否則創建數據庫,並且是私有模式創建。
create table if not exists book(name,sex,age,phone)這句話的意思是這個表如果不存在則創建。mssql里面就不能醬紫寫。
最后一句話的意思是執行sql。是不是跟ADO.NET很相似!
ok了至此我們做了一個創建一個數據庫和表的功能,然后在OnCreate方法調用這個方法就創建了一個數據庫。
網上有一些方法是利用IO去找這個庫是否存在,說一下 IO的方式創建的數據庫路徑跟這個方法創建的路徑完全不一樣(斷點調試可以看一下就知道了)
然后開始做按鈕的保存事件如下代碼
1 btnSeve.Click += delegate 2 { 3 EditText txtName = FindViewById<EditText>(Resource.Id.txtName); 4 EditText txtAge = FindViewById<EditText>(Resource.Id.txtAge); 5 RadioGroup rdogSex = FindViewById<RadioGroup>(Resource.Id.rdogSex); 6 RadioButton rdoSex = FindViewById<RadioButton>(rdogSex.CheckedRadioButtonId); 7 ContentValues cv = new ContentValues(); 8 cv.Put("name", txtName.Text); 9 cv.Put("sex", rdoSex.Text); 10 cv.Put("age", txtAge.Text); 11 cv.Put("phone", txtPhone.Text); 12 long a = Database.Insert("book", null, cv); 13 var callDialog = new AlertDialog.Builder(this); 14 callDialog.SetMessage("保存成功"); 15 callDialog.SetNeutralButton("確定", delegate 16 { 17 var userDetail = new Intent(this, typeof(UserDetailActivity)); 18 //如果不寫參數則是無參數跳轉 19 20 StartActivity(userDetail); 21 }); 22 callDialog.Show(); 23 };
ContentValues cv = new ContentValues();
這個類似於ADO.NET中的sqlparameter類似put方法的第一個參數是列明,第二個是值。
long a = Database.Insert("book", null, cv);插入到這個表中(本來想詳細寫一下,無奈英語太渣,中間參數意思沒搞明白)。
這樣就執行了一個插入的功能,當然也可以使用ExecSQL方法來用sql執行插入,這里不細說了。
跳轉到另一個頁面做查詢,做查詢之前也要打開數據庫。用打開或者創建的方式進行打開數據庫。
查詢代碼如下
1 var data = Database.Query("book", new string[] { "name,sex,age,phone" }, "", null, "", "", ""); 2 while (data.MoveToNext()) 3 { 4 lblDetail.Text += data.GetString(0) 5 + data.GetString(1) 6 + data.GetString(2) 7 + data.GetString(3) + "|"; 8 } 9 data.Close(); 10 Database.Close();
這個查詢代碼就有一些類似於java的查詢方式,查詢哪個表,那些字段,后面的條件為空了,這些條件有排序 where 等(要查詢的表名,要獲取的字段名,WHERE 條件,包含可選的位置參數,去替代 WHERE 條件中位置參數的值,GROUP BY 條件,HAVING 條件。)。
循環內部的GetString(Index)是列的位置,位置是從0開始。
基本就到這了,下次差不多是gridview方面相關內容了。
最后禁止轉載。話說誰能告訴我怎么加內個禁止轉載的樣式??
來源於http://www.cnblogs.com/minCS/p/4118170.html
