日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android平臺應(yīng)用開發(fā)實例:Notepad

在這個教程中將會建立一個簡單列表界面,允許用戶添加刪除,但是不能編輯。包括如下的內(nèi)容:

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計,廣平網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:廣平等地區(qū)。廣平做網(wǎng)站價格咨詢:18982081108

◆ListActivities的基礎(chǔ)知識和如何建立菜單項。

◆如何使用SQLite 數(shù)據(jù)庫訪問數(shù)據(jù)。

◆如何使用ArrayAdapter綁定數(shù)據(jù)到ListView (最簡單的一種方式)。

◆最基本的Layout,包括如何顯示一個ListView,如何向一個菜單插入菜單項以及如何響應(yīng)菜單

第一步 建立工程

使用Eclipse建立一個工程Notepad

第二步 如何使用Sqlite數(shù)據(jù)庫

和系統(tǒng)相關(guān)的接口調(diào)用都要用到Context類。

1打開數(shù)據(jù)庫

代碼片段:

public DBHelper(Context ctx) {
try {
//打開已經(jīng)存在的數(shù)據(jù)庫
db = ctx.openDatabase(DATABASE_NAME, null);
} catch (FileNotFoundException e) {
try {
//建立新的數(shù)據(jù)庫
db =
ctx.createDatabase(DATABASE_NAME, DATABASE_VERSION, 0, null);
//建立數(shù)據(jù)表
db.execSQL(DATABASE_CREATE);
} catch (FileNotFoundException e1) {
db = null;
}
}
}

Context類的openDatabase可以打開一個已經(jīng)存在的數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在,將會拋出FileNotFoundException異常??梢酝ㄟ^Context類的createDatabase函數(shù)建立一個新的數(shù)據(jù)庫。通過調(diào)用SQLiteDatabase 的execSQL方法,執(zhí)行一條SQL語句建立一個新的數(shù)據(jù)表。

2.獲取表中的數(shù)據(jù)

代碼如下:

public List﹤Row﹥ fetchAllRows() {
ArrayList﹤Row﹥ ret = new ArrayList﹤Row﹥();
try {
Cursor c =
db.query(DATABASE_TABLE, new String[] {
"rowid", "title", "body"}, null, null, null, null, null);
int numRows = c.count();
c.first();
for (int i = 0; i ﹤ numRows; ++i) {
Row row = new Row();
row.rowId = c.getLong(0);
row.title = c.getString(1);
row.body = c.getString(2);
ret.add(row);
c.next();
}
} catch (SQLException e) {
Log.e("booga", e.toString());
}
return ret;
}

 

建立一個游標類Cursor 通過SQLiteDatabase 的query方法查詢一個表格。有了Cursor就可以遍歷所有的記錄了。

3添加新的記錄

public void createRow(String title, String body) {
ContentValues initialValues = new ContentValues();
initialValues.put("title", title);
initialValues.put("body", body);
db.insert(DATABASE_TABLE, null, initialValues);
}

 

 

構(gòu)造一個ContentValues類,通過調(diào)用put方法,可以設(shè)置一條記錄的屬性。通過調(diào)用SQLiteDatabase的insert方法添加一條新的記錄。

4 刪除記錄

public void deleteRow(String str)
{
db.delete(DATABASE_TABLE, "title=\'" + str+"\'", null);
}

 

直接調(diào)用SQLiteDatabase的delete方法,第二個參數(shù)是一個SQL條件表達式。

第三步 顯示方式和界面

大部分的界面都有一個Layout。我們的界面是顯示在整個屏幕中的List。還有其他的顯示方式,比如懸浮的窗口(Dialog,Alert)。
打開main.xml文件。
這是一個定義界面顯示風格的資源文件。

a. 所有的界面資源文件都從這樣的一行開始: ﹤?xml version="1.0" encoding="utf-8"?﹥.

b. 一般的類型定義都是LinearLayout (并不是總是)

c. 關(guān)于XML的名稱空間的定義,總是下面一行:

xmlns:Android="http://schemas.android.com/apk/res/android"

#p#

第四步 編輯notepad_list.xml文件

最終如下所示:

﹤?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=" fill_parent "﹥
﹤ListView id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/﹥
﹤TextView id="@id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_notes"/﹥
﹤/LinearLayout﹥

a. ListView和TextView只能顯示一個,正常情況下,ListView會被顯示出來,當沒有任何一個數(shù)據(jù)的時候?qū)@示一個TextView ,顯示出 "還沒有建立任何數(shù)據(jù)!" ,字符串資源將被定義在資源文件中。

b. 在 ListView 和 TextView中的帶@符號的字符串表示,XML解析器將會分析出后面的數(shù)據(jù)是一個資源ID。

c. 通過更改資源文件,在R.java文件中的代碼會反應(yīng)出來。在代碼中使用的資源都要通過R.java中的常量進行索引

第五步 定義一個顯示列表項風格的配置文件

在res/layout目錄現(xiàn)建立一個新的文件notes_row.xml.

添加如下的代碼:

﹤?xml version="1.0" encoding="utf-8"?﹥

﹤TextView id="@+id/text1"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/﹥

 

 

第六步

把Notepad 的父類從 Activity 改為 ListActivity:

public class Notepad extends ListActivity

 

注意: 必須導(dǎo)入ListActivity,在 Eclipse下可以使用, ctrl-shift-O

第七步

有三個方法: onCreate, onCreateOptionsMenu 和 onOptionsItemSelected, 需要我們填充:

onCreate()當一個界面開始顯示的時候會被調(diào)用,相當于一個界面的主函數(shù)。在這里可以初始化資源和狀態(tài)。

onCreateOptionsMenu() 被用來建立一個界面的菜單。當用戶點擊菜單鍵的時候?qū)@示出來。

onOptionsItemSelected()當用選擇菜單的時候?qū)徽{(diào)用。

第八步

填充onCreate() 方法。

在這里可以設(shè)置界面標題,初始化DBHelper對象管理數(shù)據(jù)。填充List列表。

a. 調(diào)用super()傳入?yún)?shù)icicle

b. setContentView to R.layout.notepad_list

c. 定義另外一個類dbHelper

d. 初始化DBHelper類。

e. 最后調(diào)用方法-fillData()-

f. onCreate()方法如下所示:

@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.notepad_list);
dbHelper = new DBHelper(this);
fillData();
}

添加私有的屬性DBHelper

private DBHelper dbHelper;

 

第九步填充onCreateOptionsMenu() 方法.

在strings.xml文件中定義字符串資源。 a. 在strings.xml 文件中添加一個字符串資源

﹤string name="menu_insert"﹥添加﹤/string﹥,

﹤string name="menu_delete"﹥刪除﹤/string﹥,

這些在String.xml文件中定義的資源,保存文件后,在R.java中會出先相應(yīng)的資源ID。

定義一個菜單ID 在NotePad.java 中。

public static final int INSERT_ID = Menu.FIRST;
public static final int DELETE_ID = Menu.FIRST +1;

 

b. 在onCreateOptionsMenu() 中添加菜單項,返回父類法方法onCreateOptionsMenu的返回值.。代碼如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);
menu.add(0, INSERT_ID, R.string.menu_insert);
menu.add(0, DELETE_ID, R.string.menu_delete);

return result;
}Menu.Add(num1,menuid,string)

其中num1是一個可以為菜單項排序的基數(shù),所有一樣基數(shù)的菜單項按照加入的順序排序,基數(shù)相同的菜單項排列在一起,基數(shù)按照從小到大的順序從上到下排列菜單項。Menuid是唯一一個菜單項的標識。當菜單項被用戶選擇的時候,這個標識就會在onOptionsItemSelected()方法的參數(shù)中出現(xiàn)。

第十步

填充onOptionsItemSelected() 方法:

當用戶選擇菜單以后,onOptionsItemSelected()方法將會被調(diào)用。通過調(diào)用item.getId()方法可以得到選擇的菜單的ID進而區(qū)別不同的菜單。 The super.onOptionsItemSelected(item) 返回父類的onOptionsItemSelected()方法;

@Override
public boolean onOptionsItemSelected(Item item) {
switch (item.getId()) {
case INSERT_ID:
createNote();
break;
}

return super.onOptionsItemSelected(item);
}


本文題目:Android平臺應(yīng)用開發(fā)實例:Notepad
新聞來源:http://www.5511xx.com/article/djpchje.html